gpt4 book ai didi

python - 如何将参数从 guizero 对象传递给函数?

转载 作者:行者123 更新时间:2023-12-02 16:56:59 26 4
gpt4 key购买 nike

我无法将任何参数传递给由 guizero 小部件调用的函数,无论是在初始化时使用属性“command”还是通过调用事件。

这按预期工作(没有传递参数):

from guizero import App, PushButton

def go():
print (10)

app = App(title="Test")
button = PushButton(app, text = "Click Here", command = go)

app.display()

但是以下打印数字 10 一次,在按钮被点击之前,然后当我点击时,没有任何反应

from guizero import App, PushButton

def go(n):
print (n)

app = App(title="Test")
button = PushButton(app, text = "Click Here", command = go(10))

app.display()

我得到的结果相同:

from guizero import App, PushButton

def go(n):
print (n)

app = App(title="Test")
button = PushButton(app, text = "Click Here")
button.when_clicked = go(10)

app.display()

我错过了什么?

提前致谢!

最佳答案

from guizero import App, PushButton
def go(n):
print (n)
app = App(title="Test")
button = PushButton(app, text = "Click Here", command = lambda: go(10))
app.display()

无论何时你在任何地方写go(10),你都在调用函数go。您可能认为您正在传递带参数的 go,但事实并非如此,因为 go() 旁边的括号会立即调用该函数。如果你想将函数go传递给另一个函数,并且go也应该传递一些参数,那么你需要包装函数go 并将包装函数作为参数“command”传递。使用 lambda 函数来包装 go(10) 就是这样一种方式。

之所以可行,是因为 lambda 函数没有立即调用。你是说 command() 最终应该调用 declared 匿名 lambda 函数,当调用该 lambda 函数时,它本身会调用 go(10)。您正在声明一个匿名 lambda 函数,而不是调用它。稍后将调用 lambda 函数作为 command()

关于python - 如何将参数从 guizero 对象传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56095177/

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