2013-05-13 63 views
5

我在我的代码中添加了一个OptionMenu小部件,并为它分配了一个列表选项。这是它是如何:OptionMenu在点击时不会显示第一个选项(Tkinter)

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,我不能即使使用向上和向下键来更改它。我试图寻找解决方案,但我没有任何地方,所以我开始认为它是widget的默认操作方式,但我没有发现任何内容向我展示如何在我阅读的文档中解决它。
P.S .:我正在使用Python 3.3

+0

是'z' Tkinter'StringVar'的一个实例吗?你确定'userlist'具有你认为它具有的价值吗? – 2013-05-13 02:47:00

+0

是的,它是,是的,它的确如此。该列表是从txt文件的行中创建的,没有断行符'\ n'(为此我使用.strip())。该文本文件目前有两行:“用户1”和“用户2”。它被设置为userList [0]。 (我将编辑文本以添加此内容) – AugustoQ 2013-05-13 03:49:29

回答

1

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

for user in userList: 
    usersOption["menu"].insert("end", "command", label=user, command=_setit(z, user, changeUser)) 
6

我有同样的问题,这是快把我逼疯了,所以我看着在source。我认为问题是第三个构造函数参数是默认值。如果您没有在* userList之前指定它,它看起来像是将第一个项目作为默认值。一个真正的解决将是这样的:

z = StringVar() 
z.set(userList[0])  
usersOption = OptionMenu(frame1, z, userList[0] ,*userList)#, command=changeUser) 
usersOption.pack(side=RIGHT, padx=3) 
+0

是的。在[这个问题]中回答(https://stackoverflow.com/questions/19138534/tkinter-optionmenu-first-option-vanishes) – Kalissar 2017-08-30 13:38:55

3

晚答案..

只需使用

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

作品完美的我。

相关问题