Tkinter按钮未触发却提前执行dice_roller函数问题咨询
解决Tkinter按钮绑定函数时自动执行的问题
嘿,我完全懂你的困惑——明明想让函数只在点击按钮时运行,结果它一启动程序就跑起来了,这确实有点让人摸不着头脑!其实这是Tkinter里一个非常常见的小误区,我来帮你搞定它。
问题根源
你大概率是在设置按钮的command参数时,给函数名加上了括号,比如写成了这样:
tkinter.Button(window, text="Roll Dice", command=dice_roller())
Python看到dice_roller()时,会立刻执行这个函数,把返回值当作command的参数,而不是把函数本身作为点击触发的回调。这就导致程序一启动,函数就自动跑起来了。
解决方案
1. 无参数的函数
只需要把括号去掉,直接传递函数名即可:
tkinter.Button(window, text="Roll Dice", command=dice_roller)
这样Tkinter就会把dice_roller函数保存为点击按钮时才执行的回调。
2. 需要传递参数的函数
如果你的dice_roller需要接收参数(比如指定骰子的面数),可以用lambda表达式来包裹函数调用:
# 比如传递参数6,表示6面骰子 tkinter.Button(window, text="Roll Dice", command=lambda: dice_roller(6))
lambda会创建一个匿名函数,只有在按钮被点击时才会执行dice_roller(6)。
结合你的代码补充
你提供的代码里还没看到按钮的部分,按照这个思路修改按钮的command参数,就能解决函数提前执行的问题啦。
内容的提问来源于stack exchange,提问作者Aidan Closke
相关产品推荐
相关产品推荐

