2017-10-19 345 views
0

我试图打印出选项菜单中选定的值,但每次运行代码时都只打印第一个值,即使将我的选择更改为b或c。不知道在哪里,我wrong.This是我的代码:从Python中的Tkinter OptionMenu获取值

所有的
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) 

回答

0

首先,你需要调用Tk的的mainloop在你的代码的末尾。此外,请尝试跟踪options类变量。

docs您可以使用trace方法将“observer”回调附加到该变量。回调在内容改变时被调用。

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

好的。什么是“w”代表什么?我仍然对python很陌生,所以很多东西都遇到了麻烦。 – West

+0

@West:代表'写'。我已经更新了我的答案,以包含来自文档的简短说明。 – mentalita

+0

谢谢。有没有办法让选定的值被放入一个变量中,以便我可以在任何地方使用它? – West

0

而是跟踪变量,你可以使用OptionMenucommand选项。每次点击菜单项时,都会调用该命令。这个命令有一个参数:被选中的项目。

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

在这种情况下,最初选择的项目不会被打印,因为用户没有点击它。如果你需要options.set('a')来触发你的回调,那么你将不得不像mentalita的回答那样追踪变量。