14 Stimmen

Wie kann man erkennen, wenn sich ein OptionMenu oder Checkbutton ändert?

Meine tkinter-Anwendung hat mehrere Steuerelemente, und ich möchte wissen, wenn Änderungen an ihnen auftreten, so dass ich andere Teile der Anwendung aktualisieren können.

Gibt es irgendetwas, was ich tun kann, außer eine Updater-Funktion zu schreiben und am Ende eine Schleife mit:

root.after(0, updaterfunction) 

Diese Methode hat sich in der Vergangenheit bewährt, aber ich befürchte, dass sie teuer sein könnte, wenn es viele Dinge zu überprüfen gibt.

Selbst wenn ich diese Methode anwenden würde, könnte ich Ressourcen sparen, indem ich nur Elemente mit geänderten Variablen aktualisiere? Wenn ja, teilen Sie uns bitte mit, wie, da ich nicht sicher bin, wie ich bestimmte Änderungen außerhalb der Aktualisierungsfunktion erkennen kann.

21voto

Bryan Oakley Punkte 337213

Viele tkinter-Steuerelemente können mit einer Variablen verknüpft werden. Für diese können Sie eine Spur auf die Variable setzen, so dass eine Funktion aufgerufen wird, wenn sich die Variable ändert.

Beispiel:

Im folgenden Beispiel wird der Callback immer dann aufgerufen, wenn sich die Variable ändert, unabhängig davon, wie sie geändert wird.

def callback(*args):
    print(f"the variable has changed to '{var.get()}'")

root = tk.Tk()
var = tk.StringVar(value="one")
var.trace("w", callback)

Weitere Informationen zu den Argumenten, die an den Callback übergeben werden, finden Sie unter diese Antwort

9voto

shawn1912 Punkte 144

Wenn Sie eine Tkinter-Variablenklasse wie StringVar() zum Speichern der Variablen in Ihrem Tkinter OptionMenu o Checkbutton können Sie seine trace() Methode.

trace() überwacht im Wesentlichen die Variable, wenn sie gelesen oder beschrieben wird.

Die trace() Methode benötigt 2 Argumente - mode y function callback .

trace(mode, callback)

  • Das Argument "Modus" ist eines von "r" (Aufruf des Beobachters, wenn die Variable von jemandem gelesen wird), "w" (Aufruf, wenn die Variable von jemandem geschrieben wird) oder "u" (undefiniert; Aufruf, wenn die Variable gelöscht wird).
  • Das Callback-Argument ist der Aufruf, den Sie an die Funktion richten wollen, wenn die Variable geändert wird.

So wird es verwendet -

def callback(*args):
    print("variable changed!")

var = StringVar()
var.trace("w", callback)
var.set("hello")

Quelle: http://effbot.org/tkinterbook/variable.htm

8voto

YuenFHelbig Punkte 77

Um ein Ereignis auszulösen, wenn eine Auswahl getroffen wird, setzen Sie die Befehlsoption für OptionMenu

ex.

def OptionMenu_SelectionEvent(event): # I'm not sure on the arguments here, it works though
    ## do something
    pass

var = StringVar()
var.set("one")
options = ["one", "two", "three"]
OptionMenu(frame, var, *(options), command = OptionMenu_SelectionEvent).pack()

0voto

Vignesh Punkte 1409

Dies wird die Dropdown-Auswahl auf der Konsole ausgeben. Aber mein Vorschlag ist, die Konsole in GUI-basierten Anwendungen zu vermeiden. erstellen Sie einen Textindikator und geben Sie die Ausgabe darauf aus

Verwenden Sie die Funktion in folgendem Code

from tkinter import *
tk = Tk()
def OptionMenu_SelectionEvent(event):
    print(var.get())
    pass
var = StringVar(); var.set("one")
options = ["one", "two", "three"]
OptionMenu(tk, var, *(options), command = OptionMenu_SelectionEvent).pack()
tk.mainloop()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X