Создание диалогового окна выбора с помощью tkinter - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь сделать с помощью tkinter функцию, аналогичную кнопочной панели easygui (http://easygui.sourceforge.net/tutorial.html#buttonbox), которую я должен вызывать из консольных и графических приложений:

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

Тестирование:

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

Создает окно с меткой, списком выбора и кнопками, но не возвращает выбранный элемент при нажатии кнопки «Готово». Как я могу заставить это работать?

1 Ответ

0 голосов
/ 26 мая 2018

Это немного перегруппировано в класс, но вы хотели это сделать?

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