我正在创建一个简单的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()
答案 0 :(得分:1)
如果您只想使用新列表更新列表框,则update_idletasks(个体)
输入事件循环,直到调用所有空闲回调。这将更新窗口的显示,但不会处理由用户引起的事件。
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)
。