5

我在我的代码中添加了一个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,即使使用向上和向下键我也无法更改它。我尝试寻找解决方案,但一无所获,所以我开始认为这是小部件的默认操作方式,但我在阅读的文档中找不到任何可以告诉我如何解决它的内容。
PS:我使用的是 Python 3.3

4

3 回答 3

7

我有同样的问题,它让我发疯,所以我查看了源代码。我认为问题在于第三个构造函数参数是默认值。如果您没有在 *userList 之前指定它,它看起来就像将第一项作为默认值。真正的解决方法是:

z = StringVar()   
z.set(userList[0])    
usersOption = OptionMenu(frame1, z, userList[0] ,*userList)#, command=changeUser)
usersOption.pack(side=RIGHT, padx=3)
于 2013-10-22T22:06:47.890 回答
6

迟到的答案。。

只需使用

self.option = OptionMenu(PARENT, VALUE TO BE CHANGED, "DEFAULT TEXT", *OPTIONS_ARRAY/LIST)

非常适合我。

于 2014-06-13T15:44:01.470 回答
0

没关系,我*userList关闭并使用 for 循环将项目作为命令插入。现在它工作得很好。
我使用的代码:

for user in userList:
    usersOption["menu"].insert("end", "command", label=user, command=_setit(z, user, changeUser))
于 2013-05-13T22:28:54.903 回答