在Python透過messagebox,可以不用在視窗上面建立任何控制項就能輕鬆製作出有提示訊息的輸出對話方塊,而且此方法提供一些按鈕供程式設計者選擇,可以根據使用者所選取的按鈕,做為下一個程式流程的依據。其語法如下:
tkinter.messagebox.方法(標題, 訊息, [icon='error/info/question/warning'])語法中的第三個參數 icon,用來指定對話方塊中顯示的圖示,可指定 error 錯誤 ❌、info 訊息 ℹ️、question 問題 ❓ 以及 warning 警告 ⚠️ 圖示。

messagebox 提供如下常用的方法,可在出現的對話方塊中顯示指定的按鈕,可
讓使用者依據按下的按鈕傳回對應的值:
| 方法 | 按鈕與圖示說明 | 傳回值 / 說明 |
|---|---|---|
| askokcancel | ![]() | 按:[確定] [取消] |
| askquestion | ![]() | 按 [是] 鈕傳回 ‘yes’。 按 [否] 鈕傳回 ‘no’。 |
| askretrycancel | ![]() | 按:[重試] [取消] |
| askyesno | ![]() | 按 [確定] 鈕傳回 True。 按 [取消] 鈕傳回 False。 |
| showerror | ![]() | 對話方塊顯示錯誤 icon,同時顯示 [確定] 鈕,此方法做為提示使用。 |
| showinfo | ![]() | 對話方塊顯示訊息 icon,同時顯示 [確定] 鈕,此方法做為提示使用。 |
| showwarning | ![]() | 對話方塊顯示警告 icon,同時顯示 [確定] 鈕,此方法做為提示訊息使用。 |
[簡例] 延續Entry01.py,當使用者輸入姓名與成績之後按下[確定]鈕即出現圖1詢問是否傳送成績。若按下[取消]鈕即顯示圖2告知取消傳送成績;若按下[確定]鈕則顯示圖3在標籤中顯示該位學生的成績與等級。(檔名:messagebox01.py)
[結果]

程式碼:
messagebox01.pyimport tkinter as tk from tkinter import messagebox as msgbox #定義fnOk函式,當按下確定鈕會執行此函式 def fnOk(): msgboxAns = msgbox.askokcancel('成績傳送', '請問是否傳送成績?', icon='info') if (msgboxAns==False): msgbox.showwarning("成績傳送", "您取消傳送成績") return vName = name.get() vScore=score.get() if vScore>=90 : level = 'A' elif vScore>=80 : level = 'B' elif vScore>=70 : level = 'C' elif vScore>=65 : level = 'D' else : level = 'F' lblResult['text'] = '{0}成績是{1},等級是{2}'.format(vName, vScore , level) win = tk.Tk() win.title('messagebox範例') win.geometry('200x120') # 指定tkinter模組的字串物件name,是txtName文字欄的變數 name=tk.StringVar() # 指定tkinter模組的整數物件score,是txtScore文字欄的變數 score = tk.IntVar() # 建立lblName標籤 lblName = tk.Label(win, text='姓名', padx=10, pady=8) lblName.grid(row=0, column=0) # 建立txtName文字欄,此文字欄代表變數為name txtName = tk.Entry(win, width=15, textvariable=name) txtName.grid(row=0, column=1) # 建立lblScore標籤 lblScore = tk.Label(win, text='分數', padx=10, pady=8) lblScore.grid(row=1, column=0) # 建立txtScore文字欄,此文字欄代表變數為score txtScore = tk.Entry(win, width=15, textvariable=score) txtScore.grid(row=1, column=1) # 建立btnOk按鈕,按下此鈕會執行fnOk函式 btnOk = tk.Button(win, text='確定', command=fnOk ) btnOk.grid(row=2, column=0) # 建立lblResult標籤 lblResult = tk.Label(win, text='', padx=10, pady=8) lblResult.grid(row=2, column=1) win.mainloop()
說明
- 第
2行:由tkinter套件匯入messagebox並更名為msgbox,程式之後即可使用msgbox來建立對話方塊。- 第
5行:建立具有[確定]和[取消]鈕的對話方塊並詢問是否傳送成績,依據使用者按下的按鈕將指定的資料傳送給msgboxAns變數。按下[確定]鈕將True指定給msgboxAns,按下[取消]鈕將False指定給msgboxAns。- 第
6~8行: 當msgboxAns為False時即顯示對話方塊告知取消傳送成績,接著離開fnOk()函式。
相關主題與延伸閱讀
- 0. 章節索引:本章全部筆記的學習地圖與快速查找。
- 1. tkinter 套件:
tkinter套件的整體介紹與元件總覽。 - 5. Entry 文字方塊元件:本篇範例延續自〈5. Entry 文字方塊元件〉的
Entry01.py。 - 4. Button 按鈕元件:對話方塊通常在按鈕的
command函式中被呼叫。 - 7. Radiobutton 選項按鈕元件:
radiobutton01.py範例也搭配messagebox顯示個人簡歷結果。 - 8. Checkbutton 核取按鈕元件:
checkbutton01.py範例同樣以messagebox顯示點餐結果。






