2016-11-06 4 views
0

私は反復子変数iでループ内に一連のボタンを作成しています。このループでは、メソッドclick()を定義します。動的に作成されるメソッドの引数

i = 0 
while(i < 10): 
    button = button() 
    def click(): 
     anotherMethod(i) 
    button.onClick = click 
    i += 1 

問題がiでは常に(理にかなっている)9のようです。メソッドごとに作成された反復に「スティック」するには、iが必要です。まるで何かが分からないような気がしますが、重複した質問もしています。私は何を検索するのか分からない。

+1

'ボタン=新しいボタンを()'有効なPythonではありません。また、あなたの質問のコードは、無限ループを引き起こします。さらに、 'button'変数をどこにも使用していないので、実際にGUIのボタンをloop_の後に置いていると思います。 – ForceBru

+1

あなたは 'i'もインクリメントしていません。 'i + = 1'を追加してください。 –

+0

コードを修正しました。 – AlgoRythm

答えて

2

ループで定義している関数で、デフォルトの引数を使用します。デフォルト値は、それが後に再定義なっても、関数が定義されている時にiの値が保持されます:

for i in range(10): # do you really need to be using a while loop? 
    def click(i=i): # use a default argument here, to save the current i value 
     anotherMethod(i) # this refers to the argument i, not the loop variable i 
    button.onClick = click 
+0

ありがとう!私が質問に入れた小さなコードブロックは、私が望んでいたことを説明するために書かれていました。多かれ少なかれ擬似コード。 – AlgoRythm

関連する問題