如何在函数中使用destroy()关闭窗口?

时间:2019-04-18 14:42:45

标签: python python-3.x tkinter

我试图按下取消按钮会取消程序。

class PayrollSummary:
    def __init__(self):
        window = Tk()
        window.title("Employee Payroll")
        btCancel = Button(frame1, text = "Cancel", command = self.processCancel)

    def processCancel(self):
        self.destroy()

这是我收到的错误消息:

  

AttributeError:“ PayrollSummary”对象没有属性“ destroy”

3 个答案:

答案 0 :(得分:3)

如果要销毁tkinter GUI,必须在根窗口上调用destroy。根据收到的错误,您没有在根窗口上调用destroy。您显然是在其他对象上调用它。

答案 1 :(得分:2)

self引用“ PayrollSummary”,而不是用Tk()初始化的tkinter对话框/窗口。

请参见How do I close a tkinter window?

答案 2 :(得分:0)

由于您没有在class PayrollSummary中继承Tk,因此self.destroy()不能仅在Object上运行,它是Tk的一种方法。

如果要使用销毁窗口,则必须继承Tk

例如:

class PayrollSummary(Tk):
    def __init__(self, *ags, **kw):
        super(PayrollSummary, self).__init__(*ags, **kw)
        self.title("Employee Payroll")
        btCancel = Button(self, text = "Cancel", command = self.processCancel)
        btCancel.pack()

    def processCancel(self):
        self.destroy()

或者如果您不想继承Tk

class PayrollSummary:
    def __init__(self):
        self.window = Tk()
        self.window.title("Employee Payroll")
        btCancel = Button(self.window, text = "Cancel", command = self.processCancel)
        btCancel.pack()

    def processCancel(self):
        self.window.destroy()