Python 为什么destroy()方法在我的tkinter程序中不起作用?
为什么,当我使用销毁方法时,程序不关闭? 我试着使用Nick.destroy、root.destroy和self.destroy,但它们都不起作用。 当用户键入正确的昵称并将其传递出类时,尝试关闭窗口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
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