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

时间:2016-10-01 16:53:59

标签: python function button kivy

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

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

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

Button(on_press=self.my_function)

但正如我所说,如果我尝试将参数传递给这样的函数,我会得到一个' AssertionError:None不可调用',就像这样:

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

1 个答案:

答案 0 :(得分:3)

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))