在Treeview中,我只显示一行的ID,而不显示其余(空)字段



在通过两个组合框单击筛选数据库数据的按钮后,我收到更新TreeView的错误。过滤似乎是成功的,但是树视图中只显示人员ID,而不显示所有相关数据。不使用过滤器按钮,一切都很好。

这是按钮的功能,允许过滤,过滤后重新显示。问题是这里的刷新:

def filtracampionati():
tv.delete(*tv.get_children())

campionati = combo_Campionato.get()
giornate = combo_Giornate.get()
cursor.execute('SELECT * FROM ARCHIVIO_Risultati WHERE campionato=? AND giornata=?',(campionati, giornate,))
result=[row[0] for row in cursor]
for row in result:
tv.insert("", END, values=row)

在函数def getData (event)中得到一个错误。我得到错误:IndexError:列表索引超出范围。问题出在我为按钮创建的函数上,因为问题发生在过滤和重新查看的时候。没有过滤一切都是好的。如何修复该功能?由于

def getData(event):
selected_row = tv.focus()
data = tv.item(selected_row)
global row
row = data["values"]
#print(row)
campionato.set(row[1])
giornata.set(row[2])
calendario.set(row[3])
ore.set(row[4])
minuti.set(row[5])
squadra_casa.set(row[6])
squadra_fuori.set(row[7])
ris_sq_casa.set(row[8])
ris_sq_fuori.set(row[9])

def dispalyAll():
tv.delete(*tv.get_children())
for row in db.fetch():
tv.insert("", END, values=row)

这是因为result=[row[0] for row in cursor]只会从每行中获取第一个字段。

要获取每行的所有字段,只需

  • removeresult=[row[0] for row in cursor]
  • changefor row in result:tofor row in cursor:
def filtracampionati():
tv.delete(*tv.get_children())

campionati = combo_Campionato.get()
giornate = combo_Giornate.get()
cursor.execute('SELECT * FROM ARCHIVIO_Risultati WHERE campionato=? AND giornata=?',(campionati, giornate,))
for row in cursor:
tv.insert("", END, values=row)