代码是:
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)
该command
选项引用了一个函数,这是你需要向其传递函数名称的一种奇特的方式。要传递引用,你必须仅使用名称,而不使用括号或参数。例如:
b = Button(... command = button)
如果要传递诸如“her”之类的参数,则必须使用一些额外的代码:
button
函数,lambda
用来创建所谓的匿名函数。在各种方面,它都是一个函数,但没有名称。当你调用lambda
命令时,它返回对创建的函数的引用,这意味着它可以用作command按钮选项的值。functools.partial
lambda
是最简单的,因为它不需要像functools.partial
这样的任何其他导入,尽管有些人认为这functools.partial
更容易理解。要创建一个button使用参数调用你的函数的lambda函数,你可以执行以下操作:
lambda: button('hey')
你最终得到的功能在功能上等同于:
def some_name():
button('hey')
如前所述,lambda返回对该无名函数的引用。由于参考是该command选项所期望的,因此你可以lambda直接在按钮的创建中使用它:
b = Button(... command = lambda: button('hey'))
问题内容: 我是Python的新手,正在尝试使用tkinter编写程序。为什么执行下面的Hello函数?据我了解,仅在按下按钮时才会执行回调?我很困扰… 问题答案: 在为其Button分配参数时调用它: 如果要传递函数(不是返回值),则应改为: 通常是一个函数对象,就是函数返回的结果。看看这是否有帮助: 如果要传递参数,则可以使用lambda表达式构造无参数可调用对象。 简而言之,因为它位于lam
问题内容: 目前,我正在研究Sams出版的《 24小时自学Android应用程序开发》一书。我是Java,Android或其他方面的新手。我在ActionScript 3中具有非常扎实的背景,该语言与Java具有足够的相似性,因此该语言本身并不难掌握,但对于本书中某些代码示例的基本原理,我仍然存在一些疑问。例如,以下是第9小时的示例代码随附的函数: 在此函数签名中,作者已将scoreTable参数
它适用于我声明的结构xy。为什么相同的模式不适用于复杂的 错误消息: 我最好的猜测是这与
我遇到了这段代码,不知道为什么X在这里工作。
问题内容: 我仍在学习python,我对此表示怀疑: 在python 2.6.x中,我通常像这样在文件头中声明编码(如在PEP 0263中 ) 之后,我的字符串照常编写: 但是每次我看到python项目代码时,都不会在标头中声明编码。而是在每个这样的字符串处声明它: 有什么不同?目的是什么?我知道Python 2.6.x默认情况下会设置ASCII编码,但是它可以被标头声明覆盖,那么每个字符串声明有
我不明白发生了什么事。我严格遵循所有的微软文档,事实上甚至不使用任何我自己的脚本/代码。首先,我按照他们的文档创建Python函数。成功了。https://docs.microsoft.com/en-us/azure/azure-functions/create-first-function-cli-python?tabs=azure-cli、cmd、browser使用命令行工具将Azure功能连