如何从tkinter OptionMenu获取列表变量?

I_d*_*hon 2 python tkinter python-3.x

我正在尝试从OptionMenupython3.3中的tkinter小部件获取列表变量.

小部件是这样写的;

list1 = ['One', 'Two', 'Three']
var1 = tkinter.StringVar()
var1.set(list1[0])

window = tkinter.Tk()
my_opmenu = tkinter.OptionMenu(window, var1, *list1)
my_opmenu.grid()
window.mainloop()
Run Code Online (Sandbox Code Playgroud)

我知道您可以使用该cget()方法来检索窗口小部件的配置,我认为在OptionMenu窗口小部件的上下文中my_opmenu是我需要调用的设置.但是当我打电话给它时,我会得到一些看起来像记忆位置的东西.

print(my_opmenu.cget('menu'))
>>.24620080.24620272.25126224.25126352.25126736.menu
Run Code Online (Sandbox Code Playgroud)

显然,内存位置不是恒定的.有什么方法可以让人类的价值回归(即list1).

Bry*_*ley 5

您无法获取列表变量,因为窗口小部件对列表变量一无所知.创建窗口小部件时,您将从列表窗口小部件中提供,但不是列表本身.

menu属性返回一个Menu类的实例.它也不会对你的清单有任何了解.

如果要将列表与窗口小部件关联,请将其设置为属性:

my_opmenu.list = list1
Run Code Online (Sandbox Code Playgroud)

之后,当您想要列表时,您可以执行以下操作:

print "my list:", my_opmenu.list
Run Code Online (Sandbox Code Playgroud)