在 tkinter 中使用选项菜单小部件时出错

error in using optionmenu widget in tkinter

我在 python 2.7 中编写了一个实现 "optionmenu" 小部件的代码。我面临一个问题,我在元组中给出了六个值,但是当我 select 另一个选项而不是 "Gmail" 时,我在下拉列表中只看到五个值。谁能告诉我我的错误?

from Tkinter import *
import ttk

root = Tk()

choices = ("Gmail", "Outlook/Hotmail", "Yahoo", "Comcast", "AT&T", "Verizon")
dropdown_var = StringVar()
dropdown_var.set(choices[0]) # set default value

def data(*args):
    value = dropdown_var.get()
    print(value)

l = ttk.Label(root, text="Select your e-mail provider : ")
l.pack(side="left")

option = ttk.OptionMenu(root, dropdown_var, *choices)
option.pack(side="left", padx=10, pady=10)

b = ttk.Button(root, text="Click", command=data)
b.pack(side="bottom")

root.mainloop()

您遇到的问题与您定义 OptionMenu 小部件的方式有关。

事实上,它与 tkinter OptionMenu 不同,因为您在声明中设置了默认值。因此,当您解压缩这些值时,第一个索引 "Gmail" 被视为小部件的 default 参数,其他是选项值。

(另外之前不需要设置dropdown_var)

试试这个版本:

choices = ("Gmail", "Outlook/Hotmail", "Yahoo", "Comcast", "AT&T", "Verizon")
dropdown_var = StringVar()

def data(*args):
    value = dropdown_var.get()
    print value # no bracket for python2

l = ttk.Label(root, text="Select your e-mail provider : ")
l.pack(side="left")

# the 3rd parameter is the default value    
option = ttk.OptionMenu(root, dropdown_var, choices[0], *choices) 
option.pack(side="left", padx=10, pady=10)