kivy python 通过单击按钮将参数传递给函数

Mar*_*oke 4 python function button kivy

按下按钮调用函数时,我无法将参数传递给函数。可以用 kivy 语言这样做:

Button: 
   on_press: root.my_function('btn1')
Run Code Online (Sandbox Code Playgroud)

但我想用 python 来做,因为我想用循环创建更多数量的按钮。目前我在 python 中调用我的函数是这样的:

Button(on_press=self.my_function)
Run Code Online (Sandbox Code Playgroud)

但正如我所说,如果我尝试将参数传递给这样的函数,我会收到“AssertionError: None is not callable”,如下所示:

Button(on_press=self.my_function('btn1'))
Run Code Online (Sandbox Code Playgroud)

inc*_*ent 9

Button(on_press=self.my_function)
Run Code Online (Sandbox Code Playgroud)

这是函数作为参数传递

Button(on_press=self.my_function('btn1'))
Run Code Online (Sandbox Code Playgroud)

这是调用函数并将返回值作为参数传递给on_press。由于返回值是 None,你会得到你的错误。

相反,您需要传递一个调用普通函数并自动传递参数的新函数。一般来说,使用起来很方便functools.partial

from functools import partial
Button(on_press=partial(self.my_function, 'btn1'))
Run Code Online (Sandbox Code Playgroud)

您还可以使用 lambda 函数:

Button(on_press=lambda *args: self.my_function('btn1', *args))
Run Code Online (Sandbox Code Playgroud)