2017-04-18 676 views
0

在我的腳本中,我有時會打電話給我的ErrorWindow類以顯示錯誤消息。這將創建一個空的tkinter窗口和一個messagebox錯誤窗口。我或者只想要messagebox窗口,或者我想讓tkinter窗口在關閉錯誤窗口時自動關閉。 我試了兩件代碼:關閉tkinter窗口以及messagebox錯誤窗口

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)一次,關閉所有窗口(這是否是一個或兩個)?

回答

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) 

這沒有業務的一類。你應該重做這個簡單的功能。

+0

你還需要記住要摧毀它,或者每次調用一個新窗口時創建另一個和另一個... –

+0

好點;編輯。 – Novel

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

+0

因此,這將在整個程序期間保持打開tkinter窗口,這反過來又是每個打開的錯誤消息的父窗口。 – RnRoger

+0

@RRroger我不確定'open'是什麼意思,但是,它會在整個程序中保留未顯示的,不可見的Tk *對象*,並可用作主和子部件。 IDLE目前以這種方式工作:撤銷的根Tk實例是可見Toplevel實例的主人。 –