关闭tkinter窗口和消息框错误窗口

时间:2017-04-18 18:39:06

标签: python user-interface tkinter

在我的脚本中,我有时会调用我的ErrorWindow类来显示错误消息。这会创建一个空的tkinter窗口和一个messagebox错误窗口。我要么只想要messagebox窗口,要么在关闭错误窗口时我希望tkinter窗口自动关闭。 我尝试了两段代码:

class ErrorWindow:
    def __init__(self,error_message):
        self.error_window = tk.Tk()
        messagebox.showerror("ERROR",error_message,command=self.close)
        self.error_window.protocol("WM_DELETE_WINDOW", self.close)
        self.error_window.mainloop()

    def close(self):
        self.error_window.destroy()

class ErrorWindow:
    def __init__(self,error_message):

        messagebox.showerror("ERROR",error_message) #automatically creates a tk window too

但是,即使使用第二个,我关闭tkinter后仍会保留messagebox窗口。

如何对课程进行编程,以便我只需按一个按钮(窗口右上角的OkX)一次即可关闭所有窗口(无论是一个窗口)或者两个)?

2 个答案:

答案 0 :(得分:1)

您需要withdraw主窗口:

class ErrorWindow:
    def __init__(self,error_message):
        if not tk._default_root: # check for existing Tk instance
            error_window = tk.Tk()
            error_window.withdraw()
        messagebox.showerror("ERROR",error_message)

这没有一个班级的业务。你应该重新设计一个简单的功能。

答案 1 :(得分:0)

您没有指定是否只有一个地方或多个地方您可能想要一条错误消息。如果是后者,您只需创建一个tk窗口并撤回一次。我认为包装函数而不是类应该足以满足您的目的。

import tkinter as tk
from tkinter import messagebox

root = tk.Tk()
# consider placing root to control where messagebox appears
root.withdraw()

def showerror(message):
    messagebox.showerror('XYZ ERROR', message, parent=root)

为了避免可能出现的问题,我总是使用明确的masterparent来表示所有内容,而不再依赖_default_root