0

チェックボックス ボタン セットを作成するためのガイドとして、この例を使用しています。しかし、それは私のために発砲していません。クラス内には、ボタンで構成される関数があります。

check = CheckButtons(rax,('Button 1', 'Button 2', 'Button 3'), (True,False,False))

次に、クラス内にこの関数があります...次のようになります。

def clickButtons(self,label):

同じクラスの別のメソッドで、次のように呼び出しようとしています...

self.check.on_clicked(self.clickButtons())

この Web サイトから: 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は、チェック ボックスがクリックされたときのコールバックを登録するために使用されます。引数として、引数を 1 つ取る関数オブジェクトを渡す必要がありますlabel。使用する構文は次のとおりです。

check.on_clicked(my_obj.clickButtons)

ここで理解すべき重要なことが 2 つあります。まず、Python ではすべてがオブジェクトです。関数はたまたま属性を持つ単なるオブジェクトです__call__。2つ目は、メンバー関数をクラスのインスタンスにバインドすると、インスタンスオブジェクトが暗黙の最初の引数になるため、my_obj.clickButtons1つの引数を取る関数としてのオブジェクトになります。

呼び出すときは、「呼び出しの結果を引数として使用して、オブジェクトcheck.on_clicked(self.clickButtons())の関数を呼び出す」と言っています。の呼び出しは、2 つの引数 (暗黙のと) を必要とし、1 つの引数 (暗黙の ) だけで呼び出しているため、表示されるエラーをスローします。 on_clickedcheckself.clickButtons()clickButtonsselflabelself

クラス がAあり、関数f(self,b)があり、インスタンスaが のA場合、次の 2 つは同等です。

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 に答える