当前位置 : 首页 » 互动问答 » 正文

从Python中的Tkinter OptionMenu获取值

分类 : 互动问答 | 发布时间 : 2018-04-27 16:14:14 | 评论 : 2 | 浏览 : 73 | 喜欢 : 0

我试图打印出在选项菜单中选择的值,但每次运行代码时都只打印第一个值,即使将我的选择更改为b或c。不知道我错在哪里。这是我的代码:从tkinter导入的


窗口= Tk的()
window.geometry( “700x400”)

选项= STRINGVAR(窗口)
options.set( “a”)的
menu = OptionMenu(窗口,选项,“a”,“b”,“c”)
menu.grid(行= 2,列= 2)
选择= options.get()
打印(选择)

回答(2)

  • 1楼
  • 首先,您需要在代码的末尾调用Tk的mainloop。此外,请尝试追踪options类变量。

    From the docs: 您可以使用trace方法将“观察者”回调附加到变量。只要内容发生变化,就会调用回调函数。

    将tkinter导入为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()
  • 2楼
  • 您可以使用commandOptionMenu选项来代替追踪变量。每次点击菜单项时,都会调用该命令。这个命令有一个参数:选中的项目

    将tkinter导入为tk
    
    def回调(选择):
        打印(选择)
    
    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的回答那样追踪变量。

相关阅读: