我写了一段代码,用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
正如作战人员所期望的那样