Tech Learner
Tech Learner

Reputation: 241

error in using optionmenu widget in tkinter

I have written a code in python 2.7 which implements "optionmenu" widget. I am facing a problem that i have given six values in the tuple but when i select another option rather than "Gmail", i see only five values in the dropdown. can anyone tell me my mistake?

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()

Upvotes: 2

Views: 178

Answers (1)

PRMoureu
PRMoureu

Reputation: 13317

The issue you're facing is linked to the way you are defining the OptionMenu widget.

In fact, it's different from the tkinter OptionMenu because you set the default value inside the declaration. So when you unpack the values, the first index "Gmail" is taken as the default parameter for the widget, and the others are the options values.

(In addition, you don't need to set dropdown_var before)

Try this version :

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)

Upvotes: 1

Related Questions