首页 > 后端开发 > Python教程 > 为什么我的 Tkinter 按钮在创建时而不是单击时执行命令?

为什么我的 Tkinter 按钮在创建时而不是单击时执行命令?

DDD
发布: 2024-12-23 09:46:10
原创
175 人浏览过

Why Does My Tkinter Button Execute Its Command on Creation Instead of On Click?

创建时执行按钮命令

在 Tkinter 中,当使用命令参数初始化 Button 实例时,关联的函数旨在单击按钮时执行。然而,在某些情况下,该命令可能会在按钮创建后立即执行,这与预期的行为相反。

代码示例分析

考虑以下代码:

from Tkinter import *

admin = Tk()
def button(an):
    print(an)
    print('het')

b = Button(admin, text='as', command=button('hey'))
b.pack()
mainloop()
登录后复制

问题描述

何时您运行此代码,该按钮似乎无法正常工作。它不是在单击时执行按钮功能,而是在创建后立即打印“hey”和“het”。

说明

问题在于命令的方式参数正在初始化。该行:

command=button('hey')
登录后复制

将按钮('hey')函数调用的结果传递给命令参数。这相当于:

result = button('hey')
command=result
登录后复制

由于button('hey')函数立即执行并返回结果,因此命令被设置为结果而不是函数引用本身。因此,该函数会立即执行,而不是在单击按钮时执行。

解决方案

要解决此问题,您必须传递对按钮的引用函数而不执行它。为此,只需在初始化命令参数时省略括号即可:

command=button
登录后复制

附加说明

  • 了解传递函数之间的区别非常重要引用并执行函数。
  • 考虑使用 lambda 函数或 functools.partial 来提供必要时回调函数的参数。
  • 请参阅 zone.effbot.org 关于 Tkinter 回调的教程以获取更多详细信息。

以上是为什么我的 Tkinter 按钮在创建时而不是单击时执行命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板