2017-10-19 5 views
0

J'essaie d'imprimer la valeur sélectionnée dans le menu d'options mais seule la première valeur est imprimée chaque fois que je lance le code, même si je change ma sélection en b ou c. Je ne sais pas où je suis wrong.This est mon code:Récupérer une valeur de Tkinter OptionMenu en 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) 

Répondre

0

Tout d'abord, vous devez invoquer mainloop Tk à la fin de votre code. En outre, essayez de suivre la variable de classe options.

Depuis le docs: Vous pouvez utiliser la méthode de trace pour attacher des rappels "observateur" à la variable. Le rappel est appelé chaque fois que le contenu change.

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

OK. Qu'est-ce que "w" signifie? Je suis encore novice en python, donc j'ai des problèmes avec beaucoup de choses. – West

+0

@West: cela signifie 'écrire'. J'ai mis à jour ma réponse pour inclure une courte explication des docs. – mentalita

+0

Merci. Y at-il un moyen d'obtenir la valeur sélectionnée et de le mettre dans une variable afin que je puisse l'utiliser n'importe où? – West

0

Au lieu de tracer la variable, vous pouvez utiliser l'option command du OptionMenu. Chaque fois qu'un élément de menu est cliqué, la commande est appelée. Cette commande prend un argument: l'élément qui est sélectionné.

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() 

Dans ce cas, l'élément initialement sélectionné n'est pas imprimé car l'utilisateur n'a pas cliqué dessus. Si vous avez besoin de options.set('a') pour déclencher votre rappel, alors vous devrez tracer la variable comme dans la réponse de mentalita.