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

Tkinter多窗口自由切换问题:二次切换窗口黑屏求助

解决Tkinter多窗口切换黑屏问题(保留多个Tk()实例)

问题根源在于你调用了两次mainloop()——Tkinter的设计逻辑里,一个程序只需要一个主事件循环。你在代码末尾启动了Window1的mainloop(),切换到Window2时又在Window_2()函数里调用Window2.mainloop(),两次循环叠加会导致事件处理混乱,第二次切换回Window2时就会出现黑屏。

按下面的方式修改代码即可解决:

  • 删掉Window_2()里的Window2.mainloop(),让程序只靠Window1的主循环处理所有事件
  • 把Button2的pack()移到初始化代码里,不用每次切换都执行,避免重复布局操作
  • 启动时先隐藏Window2,只显示主窗口

修改后的完整代码:

from tkinter import *
Window1 = Tk()
Window2 = Tk()

Window1.title('first window')
Window1.geometry("800x800")
Window2.title('Second Window')
Window2.geometry("800x800")

def Window_2():
    Window1.withdraw()
    Window2.deiconify()  # 显式唤起Window2,确保切换时正常渲染

Button1 = Button(Window1, text='Go to 2', command=Window_2)
Button2 = Button(Window2, text='Go to 1', command=lambda: [Window2.withdraw(), Window1.deiconify()])

Button1.pack()
Button2.pack()  # 初始化阶段完成按钮布局

Window2.withdraw()  # 启动时默认隐藏第二个窗口
Window1.mainloop()

额外提醒:虽然上述修改能解决当前问题,但Tkinter官方推荐一个程序仅使用一个Tk()实例,多窗口用Toplevel()实现会更稳定,能避免这类奇怪的渲染异常。不过既然你暂时不想重构现有代码,上面的方案可以满足需求。

内容的提问来源于stack exchange,提问作者Robert Holmes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:27:06