0

我使用此示例作为构建复选框按钮集的指南;但是,它并没有为我开火。在一个类中,我有一个由按钮组成的函数:

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 个给定)

有人可以向我解释发生了什么......我怎么知道正在按下哪个按钮?提前致谢。

4

1 回答 1

1

该函数check.on_clicked用于注册当复选框被单击时的回调。您需要将它作为参数传递一个带有一个参数的函数对象label。您要使用的语法是:

check.on_clicked(my_obj.clickButtons)

这里有两件重要的事情需要理解。首先,在 Python 中,一切都是对象。函数只是碰巧具有属性的对象__call__。第二,当您将成员函数绑定到类的实例时,实例对象是隐式的第一个参数,因此my_obj.clickButtons是一个对象,它作为一个接受一个参数的函数。

当您调用时,check.on_clicked(self.clickButtons())您是在说“使用调用结果作为参数调用on_clicked对象上的函数”。调用会引发您看到的错误,因为它需要 2 个参数(隐式和),而您只使用一个参数(隐式)调用它。 checkself.clickButtons()clickButtonsselflabelself

如果你有一个类A,带有函数f(self,b),并且在实例aA,下面两个是等价的

a.f(1)      # call member function f on a
A.f(a,1)    # call member function f on a
于 2013-01-12T02:22:14.260 回答