Tkinter按钮绑定withdraw函数后程序启动即执行函数问题求助
问题分析与解决
核心问题:按钮command参数的错误用法
你第一个代码里的关键错误是给按钮的command参数传了change_windows()——这里的括号会让Python立即执行函数,而不是把函数绑定到按钮点击事件上。所以程序一启动就调用了change_windows(),直接显示window2、隐藏window1,和你预期的点击触发完全相反。
正确的写法是直接传递函数名(不带括号),让Tkinter在按钮被点击时再去调用这个函数:
from tkinter import * window1 = Tk() window2 = Tk() window2.withdraw() def change_windows(): window2.deiconify() window1.withdraw() # 去掉括号,仅传递函数名 Btn1 = Button(window1, text="Show window2", command=change_windows) Btn1.grid(row=0, column=0) window1.mainloop() window2.mainloop()
额外优化:避免创建多个Tk实例
Tkinter设计上只应该有一个Tk()主窗口,多个Tk()实例可能会引发事件循环冲突、组件异常等问题。更规范的写法是用Toplevel()创建子窗口,示例如下:
from tkinter import * # 仅创建一个主窗口 window1 = Tk() # 用Toplevel创建依赖于主窗口的子窗口 window2 = Toplevel(window1) window2.withdraw() def change_windows(): window2.deiconify() window1.withdraw() Btn1 = Button(window1, text="Show window2", command=change_windows) Btn1.grid(row=0, column=0) window1.mainloop()
这样只需要一个mainloop(),逻辑更清晰,也符合Tkinter的设计规范。
内容的提问来源于stack exchange,提问作者starscream1896
相关产品推荐
相关产品推荐

