在我的脚本中,我有时会调用我的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
,但即使使用第二个,我关闭messagebox
后,tkinter
窗口仍保留。
如何编程课程,以便我只需要按下一个按钮(窗口右上方的Ok
或X
(一次关闭所有窗口(无论是一个或两个(吗?
您需要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)
这没有作为课程的业务。您应该重新制作一个简单的功能。
您没有指定您可能想要一个错误消息的地方或多个地方。如果后者,您只需创建和撤回一次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
。
下面的小功能将完成工作。通过设置可以选择的类型:信息,警告或错误消息框,默认值为"信息"。您还可以设置超时,默认值为2.5秒。
def showMessage(message, type='info', timeout=2500):
import tkinter as tk
from tkinter import messagebox as msgb
root = tk.Tk()
root.withdraw()
try:
root.after(timeout, root.destroy)
if type == 'info':
msgb.showinfo('Info', message, master=root)
elif type == 'warning':
msgb.showwarning('Warning', message, master=root)
elif type == 'error':
msgb.showerror('Error', message, master=root)
except:
pass
将功能称为以下内容:有关消息类型的"信息"和2.5秒的超时:
showMessage('Your message')
或通过您自己的设置类型消息"错误"和超时4秒:
showMessage('Your message', type='error', timeout=4000)