2016-04-15 26 views
0

私は現在アドベンチャーゲームを作成しており、alt + aを自分のコールバックにバインドします。それは私が欲しいことをしないので、私は2つの質問があります:単純なバインド関数がPythonで動作しません

  • 関数もLabelにバインドすることはできますか?
  • なぜこの(単純な)コードが機能しないのですか?ここで

はコードです:

import tkinter as tk 

dw = tk.Tk() 
dw.title('Hearts') 

def play(event): 
    print('This is the test.') 

areal = tk.Frame(master=dw, width=1200, height=600, bg='blue') 
areal.pack_propagate(0) 
areal.pack(fill=tk.BOTH, expand=bool(dw)) 
areal.bind("<Alt-A>", play) 

dw.mainloop() 

は、それは私にエラーを与えるものではありませんが、私はフレームをクリックし、その後、Alt +押すと、それは何もしません。ここで何が間違っていますか?

EDIT:

import tkinter as tk 

def go_fwd(event): 
    areal.focus_set() 
    print(event.x, event.y) 

dw = tk.Tk() 
dw.title('Adventure') 


areal = tk.Frame(master=dw, width=20000, height=600, bg='blue') 
areal.pack_propagate(0) 
areal.pack(fill=tk.BOTH, expand=bool(dw)-100) 
areal.focus_set() 
dw.bind("<Alt-A>", go_fwd) 

enter = tk.Frame(master=dw, width=20000, height=100, bg='cyan') 
enter.pack(fill=tk.X) 

enterentry = tk.Text(master=enter, width=100, height=4, bg='white') 
enterentry.pack() 
enterbutton = tk.Button(master=enter, text='Senden', bg='red') 
enterbutton.pack() 

dw.mainloop() 

ここでは完全なコードです。

+0

これはおそらくhttp://stackoverflow.com/q/16923167の複製です/ 7432 –

+0

私は自分の答えを編集するので、私の完全なコードを見ることができます。 –

答えて

1

ラベルにも関数をバインドできますか?

任意のウィジェットにバインドできます。ただし、キーイベントをバインドする場合、バインディングはウィジェットにフォーカスがある場合にのみ機能します。デフォルトでは、EntryText以外のほとんどのウィジェットは、フォーカスを明示的に設定しない限り、フォーカスを取得しません。

注:は、一度に1つのウィジェットだけがフォーカスを持つことができます。

また、どのウィジェットにフォーカスがあっても起動するために、ルートウィンドウにバインディングを設定することもできます。キーバインディングがどのように処理されるかのより完全な説明については

、この回答を参照してください。https://stackoverflow.com/a/11542200/7432

なぜこの(simplyfied)のコードが動作しないのですか?

バインディングがフレームウィジェットにあり、そのウィジェットにキーボードフォーカスがないため、期待通りに動作しません。

areal.bind("<1>", lambda event: areal.focus_set()) 

注:あなただけのマウスクリックでバインディングを作成することによって、フレームをクリックした後、それが集中する与えることができる、

areal.focus_set() 

をか:あなたはそれがこのようなものに焦点を当てて与えることができます:あなたは大文字の "A"にバインドされているので、あなたが押していることをテストするときは必ず確認してください

1

フレームの代わりにdwにバインドする必要があります。

だから、dw.bind("<Alt-A>", play)を行うことができます。

マイナーノート、予想通りAlt-A大文字 Aに結合するので、あなたのキーボード上のAlt+Shift+Aをクリックする必要があると思います。キーボード上でAlt+Aを実行すると機能しません。この機能を使用するには、Alt-aにバインドする必要があります。

メインウィンドウにはキーボードフォーカスがあります。または、フレームにバインドを残して、フレームにフォーカスを設定する場合はareal.focus_set()を実行するだけです。

+0

しかし、代わりに ""を使用すると(これは左クリックです)、うまく動作します! –

+0

しかし、左クリックで正常に動作するのはなぜですか?alt + aではないのですか? –

+0

@ErichSchmidt:キーイベントは、フォーカスを持っているウィジェットに移動します。ボタンイベントは、カーソルの下のウィジェットに移動します。そのため、ボタンのバインディングは、キーのバインドとは異なる動作をしているように見えます。 –

関連する問題