在 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)
我在 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)