gpt4 book ai didi

python - 来自 Tkinter.Button 的命令

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:43 31 4
gpt4 key购买 nike

我有一个相当简单的 Python 问题,我真的很难解决。

我在 Tk 小部件父级中有一个 LabelFrame 小部件。 LabelFrame 包含许多小部件,包括标签、条目小部件和按钮。按下按钮后,我想执行 def,但是想将条目小部件中的用户输入发送到 def 进行处理。然而。当我向按钮中的命令添加任何参数时(例如 command=make_new_user(entry1,entry2),该命令会在运行代码时自动执行,甚至无需按下按钮。我希望命令仅在按下按钮时执行,而且还能够将参数发送到处理 def。

有人可以帮忙吗?

谢谢,中间类男人

最佳答案

它应该是这样的——每当你在调用函数的名称后添加括号时。仅使用其名称,您正在引用函数对象。

TKinter 本身不允许向回调添加参数。

通常的做法是创建一个“丢弃函数”,使用“lambda”关键字 -这个丢弃函数本身不接收任何参数——但它在自身内部记录您要传递给真正的处理程序的参数。

所以,如果事情只有这样,那就不用写了:

按钮(..., command=handler(par1, par2), ...)

写:

按钮(..., command=(lambda: handler(par1, par2)), ...)

然而,在 Python 的本质中还有一件事阻止了它的工作——如果“par1”和“par2”是变量,则它们的值为“live”——这意味着发送到 Button 的参数将是 watherver 值 par1 和 par2,其中保存在按钮被点击。

避免这种情况的方法是添加另一个间接级别,使用 lambda 关键字,以便参数值在 Button 创建时被“卡住”。

为了可读性,最好分两行而不是内联在按钮创建调用中:

command = (lambda p1, p2: lambda: handler(p1, p2)) (par1, par2)
Button = (..., command=command, ... )

这样做,变量“command”将包含一个丢弃函数其中变量“p1”和“p2”的即时值为“par1”和“par2”

关于python - 来自 Tkinter.Button 的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8345371/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com