簡體   English   中英

沒有按鈕的tkinter消息框

[英]tkinter messagebox without buttons

在我的程序中,我只需要通知用戶不要在沒有鍵盤或鼠標的系統中按下物理按鈕,而是要彈出等待消息,當系統再次就緒時該消息消失

您不希望在此顯示消息框有兩個原因。

首先,消息框的全部要點是它是帶有一些標准化按鈕的模式對話框,而您不需要這些按鈕。

其次,模態對話框的要點在於它是模態的-它運行自己的事件循環,並且在關閉該對話框之前不會返回。 這意味着(除非您使用的是后台線程)您的應用在顯示時將無法執行任何操作。


第一個問題很容易解決。 tkMessageBox只是圍繞一個簡單的包裝tkCommonDialog.Dialog 值得看一下源代碼,以了解構建滿足您需求的對話框有多么簡單。 但是tkSimpleDialog.Dialog甚至比tkCommonDialog更簡單(因此得名)。 例如:

class WaitDialog(tkSimpleDialog.Dialog):
    def __init__(self, parent, title, message):
        self.message = message
        Dialog.__init__(self, parent, title=title, message=message)
    def body(self, master):
        Label(self, text=self.message).pack()
    def buttonbox(self):
        pass

def wait(message):
    WaitDialog(root, title='Wait', message=message)

這就是創建沒有按鈕的模式對話框所需要的全部。 Dialog WindowstkSimpleDialog的來源有更多詳細信息。


第二個問題甚至更容易解決:如果您不希望使用模式對話框,那么您所想要的只是一個普通的Toplevel 您可能希望它是transient ,因此它會停留在母版之上,與母版一起隱藏,不在任務欄上顯示等,並且您可能還想配置各種其他內容。 但基本上,這很簡單:

def wait(message):
    win = Toplevel(root)
    win.transient()
    win.title('Wait')
    Label(win, text=message).pack()
    return win

現在您可以調用wait()並繼續運行:

def wait_a_sec():
    win = wait('Just one second...')
    root.after(1000, win.destroy)

root = Tk()
button = Button(root, text='do something', command=wait_a_sec)
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM