打开一个新的Tkinter窗口,同时继续在另一个

时间:2016-01-17 23:59:03

标签: python tkinter

我正在开发一个从桌面小部件打开新窗口的大型程序。桌面小部件有一个'自动收报机'样式标签,显示表示通过列表迭代的文本。我的问题是当我第一次编写程序时,我打开了每个新窗口调用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()

1 个答案:

答案 0 :(得分:1)

tkinter应用程序应始终只有Tk的一个实例,您应该只调用mainloop一次。如果您有多个实例,程序将无法按预期方式工作。它可以使它工作,但除非你完全理解幕后发生的事情,否则你应该坚持这个经验法则。

如果您需要更多窗口,请创建Toplevel的实例。您不应该为每个额外窗口调用mainloop

此外,你不应该以你所使用的方式调用aftermainloop已经是一个无限循环,你不需要另一个循环。本网站上有几个例子,使用after定期调用函数而不创建单独的循环。