【问题标题】:error in using optionmenu widget in tkinter在 tkinter 中使用 optionmenu 小部件时出错
【发布时间】:2017-09-18 16:59:26
【问题描述】:

我在 python 2.7 中编写了一个代码,它实现了“optionmenu”小部件。我面临一个问题,我在元组中给出了六个值,但是当我选择另一个选项而不是“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()

【问题讨论】:

    标签: python python-2.7 python-3.x tkinter optionmenu


    【解决方案1】:

    您面临的问题与您定义 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)
    

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 2018-04-14
      • 2017-02-16
      • 2017-06-15
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多