2011-08-12 6 views
1

私は10個のボタンを作成しており、ボタンのテキストには1〜10というラベルが付けられています。次のコードは10個のボタンとラベルを正しく作成します。しかし、それはすべてのボタンの出力として9を印刷しています。私はそれを行うことを期待すると、ユーザーがボタン2を押した場合、それは2Python Tk複数のボタンの作成問題

def create(): 
for i in range (1,10): 
    lst.insert(i,Button(text=i,command=lambda: prnt(i)).pack()) 

を印刷する必要があります例についてだから、スクリーニングするためのボタンの対応する番号を印刷することである(注:「PRNT(I)」です 'lst'は作成されたボタンを格納するリストです)

出力から、私は、プログラムが最新のi値を関数の引数として使用していると言うことができますユーザーがボタンを押すと、ボタンごとに10行のコードを書くことなく、どうすればこの問題を解決できますか?

答えて

2

は(ラムダに名前付き引数を注意してください)、これを試してみてください:

def create(): 
    for i in range (1,10): 
        lst.insert(i,Button(text=i,command=lambda i=i : prnt(i)).pack()) 

これは、ローカル変数としてラムダに、iの値を渡します。これがなければ、もとの変数への参照を使用しています。元の変数に格納されているものは常に解決されます。

+0

ありがとう、それは問題を解決しました。 私はPythonを初めて使い、ラムダを使っていました。もう一度助けてくれてありがとう:) – Alphaceph

関連する問題