2013-10-02 50 views
9

ttk optionmenu小部件从下拉列表中的所有值开始。在选择任何值时,列表中的第一个值将消失,永不会重新出现...tkinter optionmenu第一个选项消失

有谁知道为什么?这是小部件设计的一个特点吗?具有以下尝试:

import tkinter.ttk as ttk 
import tkinter as tk 

a = tk.Tk() 

options = ['1', '2', '3'] 
value = tk.StringVar() 

masterframe = ttk.Frame() 
masterframe.pack() 

dropdown = ttk.OptionMenu(masterframe, value, *options) 
dropdown.pack() 

a.mainloop() 

注 - 其他用户问了同样的问题在这里:OptionMenu won't show the first option when clicked (Tkinter)

他们似乎to've找到了解决办法,但不明白为什么发生。

更新:实际上,只有在使用ttk小部件时才会出现此行为。 tk小部件工作正常(尽管看起来非常丑陋)。

回答

1

似乎与ttk.OptionMenu在选项列表中的第一项必须留空:

import tkinter.ttk as ttk 
import tkinter as tk 

a = tk.Tk() 

options = ['', '1', '2', '3'] 
value = tk.StringVar() 
value.set(options[1]) 

masterframe = ttk.Frame() 
masterframe.pack() 

dropdown = ttk.OptionMenu(masterframe, value, *options) 
dropdown.pack() 

a.mainloop() 

来源:http://www.pyinmyeye.com/2012/08/tkinter-menubutton-demo.html

+0

该链接看起来已经死亡。 –

+2

尽管您的解决方法有效,但对问题的描述不是很好。 'ttk.OptionMenu'在变量参数之后和值列表之前需要一个默认值。当你的解决方案工作时,它会忽略真正发生的事情。 –

19

的ttk.OptionMenu命令的签名是这样的:

def __init__(self, master, variable, default=None, *values, **kwargs): 

这是文档字符串:

“”“与主构建主题OptionMenu插件作为母体,所述 资源textvariable设置为可变的,由默认参数指定的最初选择的值 ,菜单值由 *值和其他关键字给出。

请注意位于值列表之前的default选项。不要将空白项添加到值列表中,而要添加您想要的默认值:

options = ['1', '2', '3'] 
dropdown = ttk.OptionMenu(masterframe, value, options[1], *options) 
+5

哈哈,太棒了,你在我需要之前4个小时就给一个1岁的问题添加了一个很好的答案。 – Gregor

相关问题