我正在开发一个从桌面小部件打开新窗口的大型程序。桌面小部件有一个'自动收报机'样式标签,显示表示通过列表迭代的文本。我的问题是当我第一次编写程序时,我打开了每个新窗口调用mainloop()。结果是新窗口和程序将按设计运行,但代码将冻结。即使关闭新创建的窗口,股票代码也不会重新启动。所以我删除了mainloop()行。结果是股票代码继续运行,我可以在新窗口内工作,但一切都太迟了。我怀疑这与after()方法有关?
附件是我正在使用的测试代码,在将正确的代码应用到我的程序之前尝试对其进行排序。而且我确信你可以通过阅读代码告诉我,但我是自学和绝对新手,所以如果可能的话请愚蠢地解释。非常感谢!
from tkinter import *
def new_window():
nw = Tk()
item = Text(nw)
item.grid()
L = [1, 2, 3, 4, 5]
root = Tk()
Button(root, text = 'Open', command = new_window).grid(row = 1)
while True:
for i in L:
num = Label(root, text = i)
num.grid(row = 0)
root.after(2500)
num.update()
root.mainloop()
答案 0 :(得分:1)
tkinter应用程序应始终只有Tk
的一个实例,您应该只调用mainloop
一次。如果您有多个实例,程序将无法按预期方式工作。它可以使它工作,但除非你完全理解幕后发生的事情,否则你应该坚持这个经验法则。
如果您需要更多窗口,请创建Toplevel
的实例。您不应该为每个额外窗口调用mainloop
。
此外,你不应该以你所使用的方式调用after
。 mainloop
已经是一个无限循环,你不需要另一个循环。本网站上有几个例子,使用after
定期调用函数而不创建单独的循环。