pythonuser-interfacetkinterdropdownchoice

Creating a choicelist dialog box with tkinter


I am trying to make using tkinter a function similar to buttonbox of easygui (http://easygui.sourceforge.net/tutorial.html#buttonbox) which I should be able to call from both console and gui applications:

from tkinter import *
def mychoicebox(choicelist): 
    def buttonfn(): 
        return var.get()
    choicewin = Tk()
    choicewin.resizable(False, False)
    choicewin.title("ChoiceBox")

    Label(choicewin, text="Select an item:").grid(row=0, column=0, sticky="W")

    var = StringVar(choicewin)
    var.set('No data') # default option
    popupMenu = OptionMenu(choicewin, var, *choicelist)
    popupMenu.grid(sticky=N+S+E+W, row =1, column = 0)

    Button(choicewin, text='Done', command=buttonfn).grid(row=2, column=0)
    choicewin.mainloop()

Testing:

reply = mychoicebox(['one','two','three'])
print("reply:", reply)

It creates a window with label, choicelist and buttons but it does not return the selected item when "Done" button is pressed. How can I make this work?


Solution

  • It's a bit rearranged into a class, but is this what you were wanting to do?

    from tkinter import *
    
    class Choices:
    
        def __init__(self, parent, choicelist):
    
            Label(choicewin, text="Select an item:").grid(row=0, column=0, sticky="W")
    
            self.var = StringVar()
            self.var.set('No data') # default option
            popupMenu = OptionMenu(choicewin, self.var, *choicelist)
            popupMenu.grid(sticky=N+S+E+W, row =1, column = 0)
    
            Button(choicewin, text='Done', command=self.buttonfn).grid(row=2, column=0)
    
        def buttonfn(self): 
            print(self.var.get())
    
    if __name__ == '__main__':
        choicewin = Tk()
        choicewin.resizable(False, False)
        choicewin.title("ChoiceBox")
        app = Choices(choicewin, ['one','two','three'])
        choicewin.mainloop()