Ich arbeite mit Tkinter und habe Probleme, das OptionMenu ordnungsgemäß zu verwenden. Ich erstelle ein neues Fenster innerhalb einer Funktion, mit einem OptionMenu und einem Label. Einfach genug. Aber es scheint, dass ich keine Option aus dem OptionMenu auswählen kann. Wenn ich es außerhalb der Funktion stelle, funktioniert es gut. Aber ich muss in der Lage sein, das Fenster bei einem Funktionsaufruf zu erstellen.tkinter optionmenu funktioniert nicht
Hier ist die Funktion:
def ask_a_question():
question = Tk()
question.geometry('300x100')
qs = ['test0', 'test1', 'test2']
q = StringVar()
q.set(None)
Label(question, text = "placeholder").grid(row = 0, column = 0, padx = 10, pady = 10)
questions = OptionMenu(question, q, *qs)
questions.grid(row = 1, column = 0, padx = 10, pady = 10)
question.mainloop()
Der obige Code ausführt, als ein Befehl auf eine Schaltfläche.
In dem Fenster, das es erstellt, kann ich alle Widgets sehen, aber die Auswahl einer der Optionen im OptionMenu aktualisiert es nicht. Ich hatte ein ähnliches Problem mit Schaltflächenbildern, als ich ein Fenster im Hauptcode erstellte und eine Schaltfläche in einer Funktion erstellte. Spielt tkinter nicht gut mit Funktionen? Oder gibt es einen Trick, damit es richtig funktioniert?
Dies ist, weil Sie ein neues Fenster erstellen müssen, verwenden Sie 'Toplevel', nicht' Tk'. Ein Programm sollte nur einen einzigen Aufruf von 'Tk' haben. – Novel
Ich denke, Sie sollten Klassen als Ihre 'Frage'-Fenster verwenden, die von' Toplevel'-Widget erben. Verwenden Sie dann eine Funktion, um ein Objekt dieser Klasse zu instanziieren. – Nae
Um ein zweites Fenster zu erstellen, benutzen Sie 'question = Toplevel()' und benutzen Sie nicht das zweite 'mainloop()' weil es Probleme mit Werten in 'StringVar' verursacht. – furas