我是一个有用的助手,可以翻译您的文本。
我正在制作一个简单的Python-Tkinter应用程序。下面是我目前拥有的代码的简化版本。
我希望这段代码能在控制台上打印出“hello”或“bye”,但实际上它会打印“default”。
我一直在尝试让它工作,但是不知何故我无法解决它。如果我直接调用该函数而不使用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()
我希望这段代码能在控制台上打印出“hello”或“bye”,但实际上它会打印“default”。
我一直在尝试让它工作,但是不知何故我无法解决它。如果我直接调用该函数而不使用Optionmenu小部件,则该代码可以正常运行:
z = function("yes")
print z #prints hello
或者:
z = function("no")
print z #prints bye
有人能解释一下为什么当我使用Optionmenu小部件时它不会打印“hello”或“bye”吗?如何修复它,以便我可以使用变量z而不更改上面的部分?
谢谢!
function
以进行更改--它将以当前选定选项作为输入。在函数范围之外,z
将始终返回default
--因此你需要在函数范围内打印a.get()
。 - JoshieSimmonsa
并将其设置为"default"
。然后你初始化变量z
为a.get()
。除非你修改a
的值,否则a.get()
始终返回"default"
。在OptionMenu
中,你的帮助函数在更改菜单中的选择器时执行。如果符合条件,它将更改a
的值。你在定义函数后并在循环结束前分配变量z
。它只会被打印一次,因为它是在你可以更改菜单的设置(也就是更改a
的值)之前被调用的,所以它始终返回"default"
。 - JoshieSimmonsOptionMenu
小部件接受command
回调选项的事实非常缺乏文档(如果有的话)。 - martineau