Python Tkinter:无需关闭主窗口即可调用函数的问题
问题原因
- 多个
Tk()实例:tkinter设计逻辑中,一个应用应仅存在一个主窗口(Tk()实例),创建多个Tk()会生成独立的事件循环,导致代码执行被阻塞。 - 嵌套
mainloop():每个mainloop()会暂停后续代码执行,直到对应窗口关闭,因此fun_test_1()里的top_level.mainloop()不结束,fun_test_2()就无法启动。
修复后的代码
from tkinter import * def test(): # 第一个子窗口,用Toplevel关联主窗口root def fun_test_1(): top_level = Toplevel(root) top_level.title("Fun Test 1") def test1(): # 子窗口的子窗口,关联父窗口top_level top_level1 = Toplevel(top_level) top_level1.title('new1') Button(top_level, text='test1', command=test1).pack() fun_test_1() # 第二个子窗口,同样用Toplevel def fun_test_2(): print('def fun_test_2(): works!') top_level = Toplevel(root) top_level.title("Fun Test 2") def test1(): top_level1 = Toplevel(top_level) top_level1.title('new1') Button(top_level, text='Button', command=test1).pack() fun_test_2() root = Tk() root.title('MASTER') Button(root, text='Button', command=test).pack() root.mainloop()
关键改动说明
- 所有新窗口统一使用
Toplevel(),并传入主窗口(或父窗口)作为参数,确保所有窗口属于同一个应用实例。 - 仅保留主窗口的
root.mainloop(),它会处理所有窗口的事件循环,无需为每个子窗口单独调用mainloop()。 - 移除嵌套的
mainloop()调用,让fun_test_1()执行后不阻塞代码,fun_test_2()可立即启动,两个子窗口能同时存在并交互。
内容的提问来源于stack exchange,提问作者Vinicius Nogueira
相关产品推荐
相关产品推荐

