正在更新tkinter Treeview



我写了一段代码,用tkinter-ttk-Treeview显示一个表。然后,我选择了表上的一个项目,并对其项目进行了更改。因此,我通过删除表中的所有项目并插入新项目来更新表。但是,为什么这些项目仍然是指新添加的旧表项目?

import tkinter as tk
from tkinter import ttk
win=tk.Tk()
def testcommand():
for i in tabel.get_children():
print(i)
for i in tabel.get_children():
tabel.delete(i)
for i in tes:
tabel.insert('', 'end', text=str(i))
for i in tabel.get_children():
print(i)
tabel=ttk.Treeview(win,selectmode='browse')
tabel.heading('#0',text="COBA")
tes=[1,2,3,4]
for i in tes:
tabel.insert('','end',text=str(i))
tabel.pack()
ttk.Button(win,text='Test',command=testcommand).pack()
win.mainloop()

在第一个"打印"语句中,我得到了('001'、'002'、'003'、'004'(项,但在我更新树视图后,该项继续为('005'、'006'、'007'、'008'(。

为什么树视图中的"delete方法"没有将项重置回"I001"?有人能帮我吗?

树视图项的默认名称为"I001"、"I002"。。。并且当从树视图中删除所有项目时,用于创建名称的计数器不重置。

如果想要重置项目名称,他们必须在创建项目时明确地自己命名:

tree.insert('', 'end', <name>, **kw)

调整OP的代码,它给出

import tkinter as tk
from tkinter import ttk
win=tk.Tk()
def testcommand():
for i in tabel.get_children():
print(i)
for i in tabel.get_children():
tabel.delete(i)
for i in tes:
tabel.insert('', 'end', 'item%i' % i, text=str(i)) # explicitly name the item
for i in tabel.get_children():
print(i)
tabel=ttk.Treeview(win,selectmode='browse')
tabel.heading('#0',text="COBA")
tes=[1,2,3,4]
for i in tes:
tabel.insert('','end', 'item%i' % i, text=str(i))  # explicitly name the item
tabel.pack()
ttk.Button(win,text='Test',command=testcommand).pack()
win.mainloop()

点击测试按钮时的输出为

item1
item2
item3
item4
item1
item2
item3
item4

正如作战人员所期望的那样

最新更新