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
相关产品推荐
相关产品推荐

