2017-10-19 4 views
0

Ich versuche, den im Optionsmenü ausgewählten Wert auszudrucken, aber nur der erste Wert wird gedruckt, wenn ich den Code ausführe, selbst wenn ich meine Auswahl in b oder c ändere. Nicht sicher, wo ich bin wrong.This mein Code:Abrufen eines Werts aus Tkinter OptionMenu in Python

from tkinter import * 
window=Tk() 
window.geometry("700x400") 

options=StringVar(window) 
options.set("a") 
menu=OptionMenu(window,options, "a","b","c") 
menu.grid(row=2,column=2) 
selection=options.get() 
print(selection) 

Antwort

0

Zunächst einmal müssen Sie Tk mainloop am Ende Ihres Codes aufzurufen. Versuchen Sie auch, die Klassenvariable options zu verfolgen.

Von der docs: Sie können die Trace-Methode verwenden, um "Beobachter" -Rückrufe an die Variable anzuhängen. Der Rückruf wird immer dann aufgerufen, wenn sich der Inhalt ändert.

import tkinter as tk 

root = tk.Tk() 
options = tk.StringVar() 
options.trace_add('write', lambda *args: print(options.get())) 
menu = tk.OptionMenu(root, options, 'a', 'b', 'c') 
menu.pack() 
options.set('a') 
root.mainloop() 
+0

Okay. Wofür steht "w"? Ich bin immer noch neu in Python und habe Probleme mit vielen Sachen. – West

+0

@West: es steht für "schreiben". Ich habe meine Antwort aktualisiert, um eine kurze Erläuterung aus den Dokumenten hinzuzufügen. – mentalita

+0

Danke. Gibt es eine Möglichkeit, den Wert auszuwählen und in eine Variable zu setzen, damit ich ihn überall verwenden kann? – West

0

Statt die Variable des Aufspürens, können Sie die command Option des OptionMenu verwenden. Jedes Mal, wenn auf einen Menüeintrag geklickt wird, wird der Befehl aufgerufen. Dieser Befehl benötigt ein Argument: das Element, das ausgewählt ist.

import tkinter as tk 

def callback(selection): 
    print(selection) 

root = tk.Tk() 
options = tk.StringVar() 
menu = tk.OptionMenu(root, options, 'a', 'b', 'c', command=callback) 
menu.pack() 
options.set('a') 
root.mainloop() 

In diesem Fall wird das ursprünglich ausgewählte Element nicht gedruckt, da der Benutzer nicht darauf geklickt hat. Wenn Sie options.set('a') benötigen, um Ihren Rückruf auszulösen, müssen Sie die Variable wie in mentalitas Antwort verfolgen.

Verwandte Themen