我使用此示例作为构建复选框按钮集的指南;但是,它并没有为我开火。 在一个类中,我有一个由按钮组成的函数:
check = CheckButtons(rax,('Button 1', 'Button 2', 'Button 3'), (True,False,False))
然后我在一个类中有这个函数......它看起来像:
def clickButtons(self,label):
并且在同一个类中的另一个方法中,我试图用以下方法调用它......
self.check.on_clicked(self.clickButtons())
从这个网站: http://matplotlib.org/examples/widgets/check_buttons.html
matplotlib按钮页面状态:
on_clicked(func)单击该按钮时,使用按钮调用func 标签
返回连接ID,可用于断开连接
但是,我当前的错误说:
TypeError:clickButtons()只需要2个参数(给定1个)
有人可以向我解释发生了什么......我怎么知道哪个按钮被按下了? 提前谢谢。
答案 0 :(得分:1)
函数check.on_clicked
用于在单击复选框时注册回调。您需要将它作为参数传递给一个带有一个参数label
的函数对象。您要使用的语法是:
check.on_clicked(my_obj.clickButtons)
这里有两件重要的事情要理解。首先,在Python 中,所有都是一个对象。函数只是碰巧具有属性__call__
的对象。第二个是,当你将一个成员函数绑定到一个类的实例时,实例对象是隐含的第一个参数,因此my_obj.clickButtons
是一个对象,它作为一个带有一个参数的函数。
当您致电check.on_clicked(self.clickButtons())
时,您说'使用调用on_clicked
的结果作为参数,在对象check
上调用函数self.clickButtons()
。对clickButtons
的调用会抛出您看到的错误,因为它需要2个参数(隐式self
和label
)并且您只使用一个参数调用它(隐式self
)。
如果您的课程A
,功能f(self,b)
,a
实例A
,则以下两个是等效的
a.f(1) # call member function f on a
A.f(a,1) # call member function f on a