Frage

from Tkinter import *

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

Ich möchte in der Lage sein zu überprüfen, ob text_field aktuell ausgewählt ist oder fokussiert, so dass ich weiß, ob etwas mit dem Inhalt zu tun, wenn der Benutzer die Eingabetaste.

War es hilfreich?

Lösung

Wenn Sie etwas tun wollen, wenn der Benutzer die Eingabetaste drückt nur dann, wenn der Fokus auf den Eintrag Widget ist, fügen Sie einfach auf den Eintrag Widget eine Bindung aus. Es wird nur ausgelöst, wenn das Widget Fokus hat. Zum Beispiel:

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)

Beachten Sie, dass der Handler nur dann, wenn der erste Eintrag Fokus hat aufgerufen, wenn Sie die Eingabetaste drücken.

Wenn Sie wirklich eine globale Bindung und müssen wissen möchten, welche Widget Fokus hat, verwenden Sie die focus_get () -Methode auf das Wurzelobjekt. Im folgenden Beispiel wird eine Bindung wird aufgesetzt „“ (Der Haupt Toplevel), so dass es feuert Ganz gleich, was den Fokus hat:

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)

Beachten Sie den Unterschied zwischen den beiden: Im ersten Beispiel wird der Handler nur aufgerufen werden, wenn Sie Rückkehr in den ersten Eintrag Widget drücken. Es besteht keine Notwendigkeit zu prüfen, welche Widget Fokus hat. Im zweiten Beispiel wird der Handler egal genannt, den Widget Fokus hat.

Beide Lösungen sind gut, je nachdem, was Sie wirklich passiert sein müssen. Wenn Ihr Hauptziel ist nur etwas zu tun, wenn der Benutzer drückt in einem bestimmten Widget zurückzukehren, die ehemaligen verwenden. Wenn Sie ein globales wollen verbindlich, aber dadurch, dass die Bindung verschiedene do etwas auf, was hat oder nicht im Fokus ist, tun, um das zuletzt genannte Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top