在通过两个组合框单击筛选数据库数据的按钮后,我收到更新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]
只会从每行中获取第一个字段。
要获取每行的所有字段,只需
- remove
result=[row[0] for row in cursor]
- change
for 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)