ウィジェットは、Tkinterの中でフォーカスを持っている場合はどのようにチェックしますか?

StackOverflow https://stackoverflow.com/questions/1385921

質問

from Tkinter import *

app = Tk()
text_field = Entry(app)
text_field.pack()
app.mainloop()

私は、ユーザーがEnterキーを押すと、その内容に何かをするかどうかを知っているように、text_fieldは、現在選択されているか注目しているかどうかを確認できるようにしたい。

役に立ちましたか?

解決

あなたはフォーカスがエントリウィジェット上にある場合、ユーザーを押すだけで入力したときに、何かをするだけで、エントリウィジェットへの結合を追加したい場合。そのウィジェットにフォーカスがある場合にのみ発生します。たとえばます:

import tkinter as tk

root = tk.Tk()
e1 = tk.Entry(root)
e2 = tk.Entry(root)
e1.pack()
e2.pack()

def handleReturn(event):
    print("return: event.widget is",event.widget)
    print("focus is:", root.focus_get())

e1.bind("<Return>", handleReturn)
あなたはリターンを押したときに最初のエントリにフォーカスがある場合、ハンドラにのみ呼び出されることです。

お知らせ

あなたは本当に世界的な結合と必要性ルートオブジェクト上focus_get()メソッドを使用して、ウィジェットがフォーカスを持っている知っているしたい場合。次の例ではに置かれる結合「」 (メイントップレベル)には、フォーカスを持っているものに関係なく発動するように:

import tkinter as tk

root = tk.Tk()
e1 = tk.Entry(root)
e2 = tk.Entry(root)
e1.pack()
e2.pack()

def handleReturn(event):
    print("return: event.widget is",event.widget)
    print("focus is:",root.focus_get())

root.bind("<Return>", handleReturn)

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

どちらのソリューションは、あなたが本当に起こっているために必要なものに応じて、良いです。あなたの主な目標は、ユーザーを押すが、特定のウィジェットに戻ったときにだけ何かをする場合には、元を使用します。あなたはバインディンググローバルますが、中にしたい場合は、その持っているか、フォーカスを持っていないものに基づいて結合DO何かの異なる、後者の例を行います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top