单击时,OptionMenu不会显示第一个选项(Tkinter)

时间:2013-05-13 02:38:21

标签: python tkinter optionmenu

我在代码中添加了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

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))