我在代码中添加了OptionMenu
小部件,并为其分配了一个列表作为选项。就是这样:
z = StringVar()
z.set(userList[0])
usersOption = OptionMenu(frame1, z, *userList)#, command=changeUser)
usersOption.pack(side=RIGHT, padx=3)
现在,我认为它会显示所述列表中的所有选项。如此:
Option 1 \/ <-- the box with the selected option
Option 1 }\__the options that show on click
Option 2 }/
但它实际上只显示第二个选项,当我选择它时,基本上没有办法回来,如果我再次单击该框,它只保持显示选项2,即使使用向上和我也无法改变它向下键。我试图寻找解决方案,但我无处可去,所以我开始认为它是小部件的默认操作方式,但我没有发现任何东西向我展示如何在我阅读的文档中解决它。
P.S。:我正在使用Python 3.3
答案 0 :(得分:6)
我遇到了同样的问题,这让我很生气,所以我看了source。我认为问题是第3个构造函数参数是默认值。如果您未在* userList之前指定它,则看起来它将第一个项目作为默认值。一个真正的解决方案是:
z = StringVar()
z.set(userList[0])
usersOption = OptionMenu(frame1, z, userList[0] ,*userList)#, command=changeUser)
usersOption.pack(side=RIGHT, padx=3)
答案 1 :(得分:6)
迟到的回答..
只需使用
self.option = OptionMenu(PARENT, VALUE TO BE CHANGED, "DEFAULT TEXT", *OPTIONS_ARRAY/LIST)
完美适合我。
答案 2 :(得分:1)
没关系,我关闭*userList
并使用for循环将项目作为命令插入。现在它工作正常。
我使用的代码:
for user in userList:
usersOption["menu"].insert("end", "command", label=user, command=_setit(z, user, changeUser))