A ttk optionmenu widget starts out with all of its values in the dropdown. Upon selecting any value, the first value in the list vanishes, never to reappear...
Does anyone know why? Is this a feature of the widget's design? Try it with the following:
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()
Note - another user asked the same question here: OptionMenu won't show the first option when clicked (Tkinter)
They seem to've found a workaround, but not understood why it was happening.
UPDATE: actually this behaviour only appears when using the ttk widget. The tk widget works fine (albeit looking very ugly).
The signature of the ttk.OptionMenu command is this:
def __init__(self, master, variable, default=None, *values, **kwargs):
This is the docstring:
"""Construct a themed OptionMenu widget with master as the parent, the resource textvariable set to variable, the initially selected value specified by the default parameter, the menu values given by *values and additional keywords.
Notice the default
option which comes before the list of values. Instead of adding a blank item to the list of values, add whichever value you want as the default:
options = ['1', '2', '3']
dropdown = ttk.OptionMenu(masterframe, value, options[1], *options)
just adding to the answers of the other guys, since they didn't work for me. I discovered that if you don't set the widget option in StringVar/IntVar, it doesn't show the standard value that's been set. It might seem silly but it took me a lot of time to figure this out. Hope it helps, see ya. Example:
master = tk.Tk()
var = tk.StringVar(master)
master.mainloop()
It seems that with ttk.OptionMenu
the first entry in the options list must be left blank:
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()
Source: http://www.pyinmyeye.com/2012/08/tkinter-menubutton-demo.html
来源:https://stackoverflow.com/questions/19138534/tkinter-optionmenu-first-option-vanishes