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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:55:18