2017-10-03 9 views
0

私はボタンをTkinterの関数に与えるためにforループを使いたいと思います。私がこのようにすると、私はそれらのボタンが定義していないエラー・マッサージを取得します。私はいくつかのことを試みたが、とにかく仕事をしなかった。あなたが私を助けることができれば、私は幸せになるでしょう。ところで、それは電卓です。forループを使用してボタンに機能を与えるにはどうすればよいですか?

これは、ループがどのように見えるかです:

for s in range(0, 10): 
    def add_(s): 
     entry_box.insert(1000, str(number)) 

そして、これは私がボタンを作った方法です:あなたはボタンであなたのコマンドの引数を提供された情報に基づいて

button_zero = Button(main_window, text='0', padx=30, pady=25, command=add_0) 
button_zero.place(x=67,y=430) 

答えて

0

ではありません定義された関数と等しくなります。多分ちょうどタイプミス:あなたはすべてのentry_boxに番号を挿入10個のボタン(0-9)をお持ちの場合

for s in range(0,10): 
    def add_0(s): 
     entry_box.insert(1000,str(number)) 
1

、私は機能の工場になるだろう。あなたがadd_(2)を呼び出すと

def add_(s): 
    def wrapped(): 
     entry_box.insert(1000, s) 
    return wrapped 

、あなたがリターンと呼ばれ、関数として取得し、入力ボックスに2を追加します。

add_2 = add_("2") 
add_2() # adds 2 to the entry box, returns None 

ボタンを繰り返して、それぞれにコマンドを割り当てることができます。

for i, button in enumerate([button_zero, button_one, button_two, ...]): 
    button.configure(command=add_(str(i))) 
+0

なぜ、すでにファンクションに含まれているファンクションファクトリを使用することができるのですか? 'functools.partial'。 – Novel

+0

@ノベル・パーソナル・プリファレンスがほとんどです。 'functools.partial'はプログラマーの時間を節約するものではありませんが、' functools'をインポートすることを忘れないでください! YMMV、それは本当に最終的なコードに全く影響しません。 –

関連する問題