from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
text_field
が現在選択されているのか、フォーカスがあるのかを確認したいので、ユーザーがenterを押したときにその内容で何かをするかどうかを知ることができます。ウィジェットがTkinterにフォーカスを持っているかどうかをどうやって確認しますか?
from Tkinter import *
app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()
text_field
が現在選択されているのか、フォーカスがあるのかを確認したいので、ユーザーがenterを押したときにその内容で何かをするかどうかを知ることができます。ウィジェットがTkinterにフォーカスを持っているかどうかをどうやって確認しますか?
フォーカスが入力ウィジェットにある場合にのみユーザーが入力を押したときに何かしたい場合は、入力ウィジェットにバインディングを追加するだけです。そのウィジェットにフォーカスがある場合にのみ起動します。例:
>>> 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番目の例では、どのウィジェットにフォーカスがあってもハンドラが呼び出されます。
実際に何が起こる必要があるかによって、どちらのソリューションも良いです。ユーザが特定のウィジェットでリターンするときに何かを行うことを主な目的とする場合は、前者を使用します。グローバルバインディングを必要とするが、そのバインディングで、フォーカスがあるかどうかに基づいて異なる何かをする場合は、後者の例を実行します。
このことは可能ですが、待たずに押されるように入力してください。たとえば、ユーザーが何かを入力するためにEntryを選択しただけで、そのことが起こったことを知ることは可能でしょうか? –
@MuhamedHuseinbašić:はい、可能です。 –
どうすればいいですか? :Dどこで見つけることができますか? –