Kivy Python:通过按钮单击将参数传递给函数

7

当我通过按钮按下调用函数时,我遇到了传递参数的困难。在kivy语言中,可以像这样实现:

Button: 
   on_press: root.my_function('btn1')

但我想用Python完成它,因为我想使用循环创建更多的按钮。目前,我在Python中这样调用我的函数:

Button(on_press=self.my_function)

但是,正如我所说的,如果我尝试像这样向函数传递参数,我会得到一个“AssertionError:None is not callable”的错误,如下所示:

Button(on_press=self.my_function('btn1'))
1个回答

15
Button(on_press=self.my_function)

这是将函数作为参数进行传递。

Button(on_press=self.my_function('btn1'))

这是调用函数并将返回值作为参数传递给on_press。由于返回值为None,因此会出现错误。

您需要传递一个新函数,该函数调用您的常规函数并自动传递参数。通常可以使用functools.partial进行方便的操作:

from functools import partial
Button(on_press=partial(self.my_function, 'btn1'))

您也可以使用 lambda 函数:

Button(on_press=lambda *args: self.my_function('btn1', *args))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接