在我的脚本中,我有时会调用我的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
窗口。
如何对课程进行编程,以便我只需按一个按钮(窗口右上角的Ok
或X
)一次即可关闭所有窗口(无论是一个窗口)或者两个)?
答案 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)
为了避免可能出现的问题,我总是使用明确的master
或parent
来表示所有内容,而不再依赖_default_root
。