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

时间:2015-11-04 05:27:10

标签: python python-3.x tkinter listbox python-3.4

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

1 个答案:

答案 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)