Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么destroy()方法在我的tkinter程序中不起作用?_Python_Class_Tkinter_Methods - Fatal编程技术网

Python 为什么destroy()方法在我的tkinter程序中不起作用?

Python 为什么destroy()方法在我的tkinter程序中不起作用?,python,class,tkinter,methods,Python,Class,Tkinter,Methods,为什么,当我使用销毁方法时,程序不关闭? 我试着使用Nick.destroy、root.destroy和self.destroy,但它们都不起作用。 当用户键入正确的昵称并将其传递出类时,尝试关闭窗口 from tkinter import * class Nick(Frame): def __init__(self, master): super(Nick, self).__init__(master) self.master = master

为什么,当我使用销毁方法时,程序不关闭? 我试着使用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)

最快的修复方法是用self.master.destroy替换Nick.destroy

这就是为什么您尝试过的方法不起作用:

destroy:Nick类没有名为destroy的@classmethod root.destroy:root只能在main方法中访问,并且.mainloop正在阻塞。因此,当您通过关闭程序、ctrl+c等退出主循环时,无需销毁根。 销毁:销毁Nick类只会销毁它继承的框架,因此不会关闭整个程序
最快的修复方法是用self.master.destroy替换Nick.destroy

这就是为什么您尝试过的方法不起作用:

destroy:Nick类没有名为destroy的@classmethod root.destroy:root只能在main方法中访问,并且.mainloop正在阻塞。因此,当您通过关闭程序、ctrl+c等退出主循环时,无需销毁根。 销毁:销毁Nick类只会销毁它继承的框架,因此不会关闭整个程序
您对类而不是类的实例调用destroy。您对类而不是类的实例调用destroy。self.destroy应该可以工作,因为self是一个小部件,因此继承了destroy方法。@Fabian_Olczak,如果此答案解决了您的问题,请将其标记为已接受,以便其他人可以快速找到问题的解决方案。自我销毁应该有效,因为自我是一个小部件,因此继承了销毁方法。@Fabian_Olczak,如果此答案解决了您的问题,请将其标记为已接受,以便其他人可以快速找到问题的解决方案。@Fabian_Olczak