Разрушить интерфейс tkinter в цикле? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть скрипт tkinter с простой целью: предложите 3 решения в кнопке, нажмите «ок» после выбора опции и получите эту опцию. Код прекрасно работает, когда я его называю один раз. Но мне нужно сделать это в цикле по многим возможностям, и здесь возникает проблема, после нажатия первого «ОК», я получаю значение, но окна не разрушаются полностью, и я не могу нажать «ОК» в следующая опция во время цикла, и моя программа не работает.

class Interface(Frame):

    def __init__(self, fenetre, name, choice, **kwargs):
        Frame.__init__(self, fenetre, width=768, height=576, **kwargs)
        self.choice = choice
        self.index = np.nan
        self.pack(fill=BOTH)
        self.message = Label(self, text="Current Name : " + name)
        self.message.pack()

        self.var_case1 = IntVar()
        self.choice1 = Checkbutton(fenetre, text=choice[0], variable=self.var_case1, command=self.choice1_action)
        self.choice1.pack(side="left", anchor=W)
        self.var_case2 = IntVar()
        self.choice2 = Checkbutton(fenetre, text=choice[1], variable=self.var_case2, command=self.choice2_action)
        self.choice2.pack(side="left", anchor=W)
        self.var_case3 = IntVar()
        self.choice3 = Checkbutton(fenetre, text=choice[2], variable=self.var_case3, command=self.choice3_action)
        self.choice3.pack(side="left", anchor=W)
        self.var_case4 = IntVar()
        self.choice4 = Checkbutton(fenetre, text="None of solution", variable=self.var_case4, command=self.choice4_action)
        self.choice4.pack(side="left", anchor=W)

        self.bouton_quitter = Button(self, text="Ok", command=self.ok)
        self.bouton_quitter.pack(side="right", anchor=W)

    def ok(self):
        if self.var_case1.get() == 1:
            self.index = (self.choice[0])
            self.quit()
        if self.var_case2.get() == 1:
            self.index = (self.choice[1])
            self.quit()
        if self.var_case3.get() == 1:
            self.index = (self.choice[2])
            self.quit()
        if self.var_case4.get() == 1:
            self.quit()

    def choice1_action(self):

        self.choice2.deselect()
        self.choice3.deselect()
        self.choice4.deselect()


def main(name, list_name):
    fenetre = Tk()
    interface = Interface(fenetre, name, list_name)
    interface.mainloop()
    i = interface.index
    interface.destroy()
    return i

в интерфейсе, choice2_action и т. Д. Сделать то же самое, что и действие choice1 для кнопки

когда я пытаюсь это:

value = main("Avenger", ['Thor', 'Hulk', 'Captain'])
if value != np.nan:
    print(value)

работает

но когда я попробую это:

for i in range(5):
    value = main("Avenger", ['Thor', 'Hulk', 'Captain'])
    if value != np.nan:
        print(value)

это не удалось Если вы можете помочь мне понять, почему, это может быть здорово

Редактировать: Мне нужно сделать в цикле, потому что цель моего сценария - исправление строки. У меня есть список правильных слов и список неправильных слов. Я делаю цикл среди своего неправильного слова, и difflib предлагает 3 ближайших слова из правильного списка слов. Я хочу, чтобы пользователь выбрал вручную среди этих 3 слов, поэтому я сделал этот маленький интерфейс, пользователь может проверить исправление или «ни одно из них», если оно не удовлетворяет вот почему я повторяю

...