2009-09-06 21 views

答えて

16

フォーカスが入力ウィジェットにある場合にのみユーザーが入力を押したときに何かしたい場合は、入力ウィジェットにバインディングを追加するだけです。そのウィジェットにフォーカスがある場合にのみ起動します。例:

>>> from Tkinter import * 
>>> root=Tk() 
>>> e1=Entry(root) 
>>> e1.pack() 
>>> e2=Entry(root) 
>>> e2.pack() 
>>> def handleReturn(event): 
...  print "return: event.widget is",event.widget 
...  print "focus is:", root.focus_get() 
... 
>>> e1.bind("<Return>", handleReturn) 

returnキーを押したときに最初のエントリにフォーカスがある場合のみ、ハンドラが呼び出されることに注意してください。

グローバルバインディングが本当に必要で、どのウィジェットにフォーカスがあるかを知る必要がある場合は、ルートオブジェクトでfocus_get()メソッドを使用します。次の例では、バインディングは "。"になります。 (メイントップレベル)、それは関係なく、フォーカスを持っているものを発射しないように:

>>> from Tkinter import * 
>>> root=Tk() 
>>> e1=Entry(root) 
>>> e1.pack() 
>>> e2=Entry(root) 
>>> e2.pack() 
>>> def handleReturn(event): 
...  print "return: event.widget is",event.widget 
...  print "focus is:",root.focus_get() 
... 
>>> root.bind("<Return>",handleReturn) 

お知らせ二つの違いは:あなたが最初のエントリウィジェットでリターンを押したときに最初の例では、ハンドラのみ呼び出されます。フォーカスしているウィジェットを確認する必要はありません。 2番目の例では、どのウィジェットにフォーカスがあってもハンドラが呼び出されます。

実際に何が起こる必要があるかによって、どちらのソリューションも良いです。ユーザが特定のウィジェットでリターンするときに何かを行うことを主な目的とする場合は、前者を使用します。グローバルバインディングを必要とするが、そのバインディングで、フォーカスがあるかどうかに基づいて異なる何かをする場合は、後者の例を実行します。

+0

このことは可能ですが、待たずに押されるように入力してください。たとえば、ユーザーが何かを入力するためにEntryを選択しただけで、そのことが起こったことを知ることは可能でしょうか? –

+1

@MuhamedHuseinbašić:はい、可能です。 –

+0

どうすればいいですか? :Dどこで見つけることができますか? –

関連する問題