Tkinter:如何使用optionmenu小部件调用函数

时间:2014-06-16 12:54:40

标签: python tkinter optionmenu

我正在开发一个简单的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()

我想要这段代码打印"你好"或者" bye"到控制台,但它打印"默认"。

我一直在尝试做这项工作,但不知怎的,我无法弄明白。如果我直接调用函数而不是使用Optionmenu小部件,代码工作正常:

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

或:

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

有人可以解释为什么它不打印"你好"或者" bye"当我使用Optionmenu小部件时。我如何修复它以便我可以使用变量z而不更改线​​上方的部分?

谢谢!

1 个答案:

答案 0 :(得分:1)

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选项发生变化时,OptionMenu现在执行function - 如果选项菜单显示“是”,function以“是”作为参数执行,并将a设置为“你好“并为所有其他选项设置a到”再见“。