Tkinter:如何通过OptionMenu控件调用函数?

3 投票
1 回答
7551 浏览
提问于 2025-04-18 09:56

我正在做一个简单的Python-Tkinter应用程序。下面是我现在代码的简化版本。

from Tkinter import *
root = Tk()

def function(x): 

    if x == "yes":
        a.set("hello")
    else:
        a.set("bye")

#-----------------------------

a = StringVar()
a.set("default")

oc = StringVar(root)
oc.set("Select")
o = OptionMenu(root, oc, "yes", "no", command=function)
o.pack()

z = a.get() 
print z # prints default

root.mainloop()

我希望这段代码能在控制台打印“hello”或“bye”,但它却打印了“default”。

我一直在尝试让它正常工作,但总是搞不明白。直接调用这个函数时代码运行得很好,但如果使用Optionmenu这个小部件就不行了:

z = function("yes")
print z #prints hello

或者:

z = function("no") 
print z #prints bye

有人能解释一下为什么在使用Optionmenu小部件时,它不打印“hello”或“bye”吗?我该怎么做才能在不改变上面那部分代码的情况下使用变量z呢?

谢谢!

1 个回答

5
from Tkinter import *
root = Tk()

a = StringVar()
a.set("default")

oc = StringVar(root)
oc.set("Select")

def function(x):

  if x == "yes":
      a.set("hello")
      print a.get()

  else:
      a.set("bye")
      print a.get()

o = OptionMenu(root, oc, "yes", "no", command=function)
o.pack()


z = a.get()    
print z

root.mainloop()

当你改变选项菜单的选择时,OptionMenu会立即执行function这个函数。如果选项菜单显示的是“yes”,那么function就会用“yes”作为参数来执行,并把a的值设置为“hello”。而对于其他的选项,a的值会被设置为“bye”。

撰写回答