python中button中command_python – 为什么在声明时执行Button参数“command”?

我的代码是:

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’,然后,当我按下按钮时没有任何反应.

解决方法:

考虑以下代码:

b = Button(admin, text='as', command=button('hey'))

它与此完全相同:

result = button('hey')

b = button(admin, text='as', command=result)

命令选项引用一个函数,这是一种奇特的方式,表示你需要传递函数的名称.要传递引用,您必须仅使用名称,而不使用括号或参数.例如:

b = Button(... command = button)

如果你想传递一个参数,如“嘿”,你必须使用一些额外的代码:

>你可以创建一个中间函数,可以在没有你的参数的情况下调用,然后调用你的按钮函数,

>您可以使用lambda创建所谓的匿名函数.在任何方面它都是一个功能,除了它没有名称.当您调用lambda命令时,它返回对创建函数的引用,这意味着它可以用于按钮的命令选项的值.

>你可以使用functools.partial

对我来说,lambda是最简单的,因为它不需要像functools.partial这样的任何其他导入,尽管有些人认为functools.partial更容易理解.

要创建一个使用参数调用按钮函数的lambda函数,您可以执行以下操作:

lambda: button('hey')

您最终得到的功能在功能上等同于:

def some_name():

button('hey')

正如我之前所说,lambda返回对这个无名函数的引用.由于引用是命令选项所期望的,因此您可以在创建按钮时直接使用lambda:

b = Button(... command = lambda: button('hey'))

最后,请参阅标题为Tkinter Callbacks on effbot.org的部分以获得一个很好的教程. lambda的覆盖范围非常精简,但那里的信息可能仍然有用.

标签:python,tkinter

来源: https://codeday.me/bug/20190910/1802087.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值