Immer die Wahl der optionmenu rechts nach der Auswahl von Python
Ich Frage mich, ob es irgendeinen Weg für mich, um zu sehen, was der Benutzer ausgewählt hat unter den Liste mit, sagen wir mal: ["Apple","Orange","Grapes"]
rechts, nachdem Sie wählen Sie entweder eine von Ihnen?
Mag, wenn Benutzer auf die optionbox angezeigt wird, und klickt Apfel, Tkinter wird etwas zurückgeben
dann, wenn er wechselt seine Auswahl an, sagen wir mal, Orange, dann wird das auch wieder etwas auf der Stelle.
Dank!
Wie man parameter richtig?
from Tkinter import *
def option_changed(a):
print "the user chose the value {}".format(variable.get())
print a
master = Tk()
a = "Foo"
variable = StringVar(master)
variable.set("Apple") # default value
variable.trace("w", option_changed(a))
w = OptionMenu(master, variable, "Apple", "Orange", "Grapes")
w.pack()
mainloop()
InformationsquelleAutor user3404844 | 2014-03-17
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spur der
StringVar
.Hier
option_changed
wird aufgerufen, wenn der Benutzer wählt eine option aus dem Menü.Können Sie wickeln Sie die trace-argument in einem lambda-Ausdruck können Sie Ihre eigenen Parameter.
.trace
Funktion?a
als parameter für den Zugriff innerhalb der Funktion. lassen Siedef option_changed(*args):
undvariable.trace("w", option_changed)
wie Sie hier sind, undprint a
wird immer noch funktionieren.lambda *args:....
undlambda args:.....
? Letzteres löst einen Fehler während der vorherigen nicht.def frob(x, y, *z)
- und call -frob(4, 8, 15, 16, 23)
, dann z-Achse werden die Tupel(15, 16, 23)
.Wenn ich über widgets mit lästigen Schnittstellen - wie
OptionMenu
ich in der Regel wird eine Klasse schreiben um es zu abstrahieren, entfernt die lästigen Attribute. In diesem Fall finde ich die Ausführlichkeit der Verwendung der StringVar jedes mal, wenn ich will erstellen Sie ein dropdown, also habe ich einfach erstellt eineDropDown
- Klasse, die enthält dieStringVar
innerhalb der Klasse (geschrieben in Python 3.5, aber übersetzt einfach für alle):Beispiel:
Bearbeitet, um hinzufügen: Nicht lange nach dem erstellen dieses post, ich habe genervt mit ein paar anderen Parametern der tk und landete ein Paket namens
tk_tools
zu machen, Dropdown-Listen und Kontrollkästchen einfacher, zusammen mit der Behandlung anderer ärgernisse.tk.OptionMenu.__init__(self, parent, self.var, *options)
auf die ttk-äquivalent, d.h.ttk.OptionMenu.__init__(self, parent, self.var, *options)
. Der Fehler den ich bekomme, istAttributeError: 'DropDown' object has no attribute 'set_menu'
. Warum ist das so - warum sollte die ttk entspricht nicht initialisiert?