我正在创建一个简单的tkinter列表,并用数字列表填充它。那么我正在删除列表的一部分,并希望在运行删除功能后立即将更改反映在列表框中。
我在函数中使用了update_idletasks()
,但它不会更新列表。有人能帮我解决这个问题吗?
from tkinter import *
main = Tk()
b1 = Button(main,text='delete section',command=lambda:func())
b1.pack()
l1 = Listbox(main)
l1.pack()
mylist =[]
for i in range(0,100):
mylist.append(i)
for k in mylist:
l1.insert(0,k)
def func():
del mylist[50:100]
l1.update_idletasks()
main.mainloop()
update_idlettasks(自身)
进入事件循环,直到调用完所有空闲回调。这将更新窗口的显示,但不会处理用户引起的事件。
如果您只是想用新列表更新Listbox,那么update_idletasks
不是您想要使用的。
有几种方法可以做到这一点。您可以删除索引50到100 中的所有项目
l1.delete(50, 100)
或者你可以删除列表中的每一项,然后重新添加
del mylist[50:100]
li.delete(0, END)
for k in mylist:
l1.insert(0, k)
此外,如果您希望使用第一个选项,请从索引50删除到100。您需要将当前插入行从l1.insert(0, k)
更改为l1.insert(END, k)
,这样它就会以升序添加到列表中。
我之所以提到这一点,是因为你似乎想保留0, 1, .. , 48, 49
。但是,如果您希望它们按降序排列,请使用l1.delete(0, 49)
。