2016-10-01 14 views
1

ボタンを押して呼び出すときに、パラメータを渡すのに問題があります。一つはkivy言語でこのようにそれを行うことができます:ボタンをクリックするとパラメータが渡されます。

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

が、私はループとボタンのより多くを作成したいと、Pythonでそれを行うしたいと思います。

Button(on_press=self.my_function) 

を私が言ったように私はこのような関数にパラメータを渡すしようとした場合、私が取得:現在、私はこのようにpythonで私の関数を呼び出す:このように、「AssertionErrorがどれも呼び出し可能ではないではありません」

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

答えて

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

またラムダ関数を使用することができます。

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

が魅力のように働きました。どうもありがとう! –

関連する問題