You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:55:15