Почему метод destroy () не работает в моей программе tkinter? - PullRequest
0 голосов
/ 17 июня 2020

почему при использовании метода destroy () программа не закрывается? Я пытался использовать Nick.destroy (), root .destroy () и self.destroy (), и ни один из них не работал. Пытается закрыть окно, когда пользователь вводит правильный ник и передает его из класса

from tkinter import *

class Nick(Frame):
    def __init__(self, master):
        super(Nick, self).__init__(master)
        self.master = master
        self.grid()
        self.mes = None
        self.count = 0
        self.lbl = Label(self, text="WPROWADZ NICK").grid(row=1, column=1)
        self.ent =Entry(self)
        self.ent.grid(row=2, column=1)
        btn = Button(self, text="Akceptuj", command=self.accept)
        btn.grid(row=2, column=2)
        self.error = Label(self, text="")
        self.error.grid(row=3, column=1)

    def accept(self):
        self.mes = self.ent.get()
        if len(self.mes) == 0:
            self.error.config(text="Nick nie moze byc pusty")
        elif " " in self.mes:
            self.error.config(text="Nick nie moze zawierac spacji")
        else:
            global mes
            mes = self.mes
            Nick.destroy()
        if self.count == 0:
            self.error.config(text="")
            self.count+=1

def main_tk():
    root = Tk()
    root.title("ONLINE CHAT")
    root.geometry("260x100")
    app = Nick(root)
    root.mainloop()

main_tk()
print(mes)

1 Ответ

2 голосов
/ 17 июня 2020

Самым быстрым решением было бы заменить Nick.destroy() на self.master.destroy()

Вот почему те, которые вы пробовали, не работают:

  • Nick.destroy(): * Класс 1009 * не имеет @classmethod, называемого destroy
  • root.destroy(): root доступен только в основном методе, а .mainloop блокируется. Таким образом, к моменту выхода из основного l oop (закрыв программу, ctrl + c, et c) нет необходимости уничтожать root.
  • self.destroy(): уничтожение класса Nick приведет к уничтожению только класса Frame, от которого он наследуется, и, следовательно, не закроет всю программу
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...