[英]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 Windows和tkSimpleDialog
的來源有更多詳細信息。
第二個問題甚至更容易解決:如果您不希望使用模式對話框,那么您所想要的只是一個普通的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.