发现很难在tiktinter窗口中动态更新列表框



我正在创建一个简单的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)

最新更新