2016-06-15 6 views
0

ttk.Buttonのすべてのインスタンスを'<Return>'イベントに単一バインドでバインドすることは可能ですか?Enterボタンを押すと、ttk.Buttonコールバックがトリガーされます。Python、tkinter:すべてのボタンを<Return>にバインドするので、そのコールバックがトリガーされますか?

さらに、一部のボタンにはlambdaコールバックがある可能性があります。そのため一般的な方法はありますか?

これはすべてのボタンを明示的にバインドすることで行うことができますが、おそらくbind_classで行うことができますか?または、ttk.Buttonをサブクラス化する?

明確化: 同じボタンでいずれかのボタンが押されたときにコールバックされます。 ボタンが必要な場合コールバックがトリガーされ、この特定のボタンがフォーカスされていて、キーボードのボタンが押されている場合。 これはttk.Buttonウィジェットのデフォルトの動作ではありません。私は、Python 3を使用しています

+1

これが呼び出されるようにしますか? (彼らの 'command'が呼び出されます)これはデフォルトで起こるはずです。または、ユーザが ''にヒットしたときに*任意の*ボタンが選択されたときに単一のコールバックを呼びたい場合は、 'bind_class'を使用します。 –

+0

お返事ありがとうございます!私は単一のバインドステートメントを作成したいと思います。最後に、特定のボタンがフォーカスされ、Returnキーが押されたときに、この特定のフォーカスされたButtonを呼び出すようにします。 –

+2

[Tkinter - 複数のボタンの同じイベント]の可能な複製(http://stackoverflow.com/質問/ 35470943/tkinter-same-event-for-multiple-buttons) –

答えて

1

あなたがe.widgetと、問題の特定のウィジェットへのアクセス権を持っているし、その特定のボタンを呼び出します結合作っているので、あなたは手動で、自分の.invoke()方法を使用して、ボタンを呼び出すことができます。

をボタンのいずれかが焦点 wrapperを持っていながら、あなたは <Return>を押すと、今フォーカスしていた特定のボタンと呼ばれ、その後 invoke()されます。
import tkinter as tk 

root = tk.Tk() 

button1 = tk.Button(root, text="button1", 
        command = lambda:print("hit button1")) 
button1.grid() 
button2 = tk.Button(root, text="button2", 
        command = lambda:print("hit button2")) 
button2.grid() 

def wrapper(e): 
    print("<Return> was pressed on a button!") 
    e.widget.invoke() 
root.bind_class("Button","<Return>",wrapper) 
root.mainloop() 

+0

ありがとう!それは完璧にうまくいった! –

+1

'ttk.Button'インスタンスをバインドするために' ttk.Button'インスタンスをバインドするために他の誰かが同じ問題に直面する場合もあります。 –

+0

私は実際にそれを知らなかった、ありがとう情報@MikhailT。 –

関連する問題