PyQt5 消息對話框(QMessageBox)的使用


消息彈窗

  • 官網教程

  • 消息對話框主要涉及QMessageBox類,QMessageBox類提供了一個模態對話框,用於通知用戶或詢問用戶問題並接收答案

  • 消息框顯示主要文本以提醒用戶情況,信息性文本以進一步解釋警報或詢問用戶一個問題,以及可選的詳細文本,以便在用戶請求時提供更多數據

    • 消息框還可以顯示用於接受用戶響應的圖標和標准按鈕
  • 消息對話框分為五種,分別是提示信息、詢問、警告、錯誤、關於

    • 其中關於又分為兩種,一種是一般性關於、另一種是介紹性關於

  • 提供了兩個 API 供使用QMessageBox,基於屬性的 API 和靜態函數,調用靜態函數是更簡單的方法,但是比使用基於屬性的API更不靈活,結果信息較少
# 基於屬性的 API
msgBox = QMessageBox()
msgBox.setText("The document has been modified.")
msgBox.exec_()

# 靜態函數 API
ret = QMessageBox.warning(self, self.tr("My Application"),
                               self.tr("The document has been modified.\n" + \
                                  "Do you want to save your changes?"),
                               QMessageBox.Save | QMessageBox.Discard
                               | QMessageBox.Cancel,
                               QMessageBox.Save)

  • 嚴重性級別和圖標和像素圖屬性
像素圖片 級別 說明
Question 用於在正常操作期間提出問題
Information 用於報告有關正常操作的信息
Warning 用於報告非嚴重錯誤。
Critical 用於報告嚴重錯誤。

  • 常用的消息彈窗 QMessageBox.Icon
彈窗類型 描述
QMessageBox.NoIcon 消息框沒有任何圖標
QMessageBox.Question 表示該消息正在提問
QMessageBox.Information 表示該消息沒有任何異常
QMessageBox.Warning 表示該消息是警告,但可以處理
QMessageBox.Critical 表示該消息代表一個嚴重問題

  • 您可以添加內置的自定義按鈕,可以使用 setStandardButtons() 方法;

  • 如果標准按鈕對於您的消息框不夠靈活,可以使用 addButton() 重載,它接受 文本ButtonRole 來添加自定義按鈕。

  • QMessageBox 使用 ButtonRole 來確定屏幕上按鈕的順序(根據平台的不同而不同); 您可以在調用 exec()之后測試 clickkedbutton()的值

  • 以下枚舉描述了標准按鈕的標志QMessageBox.StandardButton;每個按鈕都有一個定義的 QMessageBox.ButtonRole

標准按鈕 描述
QMessageBox.Ok 用AcceptRole
QMessageBox.Open 用AcceptRole
QMessageBox.Save 使用AcceptRole
QMessageBox.Cancel 使用RejectRole
QMessageBox.Close 一個用 定義的“關閉”按鈕RejectRole
QMessageBox.Discard “放棄”或“不保存”按鈕,取決於平台,定義為DestructiveRole
QMessageBox.Apply 使用ApplyRole
QMessageBox.Reset 用ResetRole
QMessageBox.RestoreDefaults 使用ResetRole
QMessageBox.Help 使用HelpRole
QMessageBox.SaveAll 使用AcceptRole
QMessageBox.Yes 使用YesRole
QMessageBox.YesToAll 使用YesRole
QMessageBox.No 用NoRole
QMessageBox.NoToAll 使用NoRole
QMessageBox.Abort 一個用RejectRole
QMessageBox.Retry 使用AcceptRole
QMessageBox.Ignore 一個用AcceptRole
QMessageBox.NoButton 無效的按鈕
  • AcceptRole表示點擊按鈕可以接受對話框
  • RejectRole表示單擊該按鈕將導致對話框被拒絕
  • DestructiveRole表示單擊該按鈕將導致破壞性更改(例如“丟棄更改”)並關閉對話框

  1. 錯誤彈窗
  • 使用 QMessageBox.critical() 方法
QMessageBox.critical(window,    # 父窗口QWidget
                     '錯誤',    # 窗口標題
                     "這是一個錯誤彈窗",      # 窗口提示信息
                      QMessageBox.Cancel | QMessageBox.Close,    
                      # 窗口內添加按鈕-QMessageBox.StandardButton,可重復添加使用 | 隔開;如果不寫,會有個默認的QMessageBox.StandardButton
                      QMessageBox.Cancel,    # 設置默認按鈕(前提是已經設置有的按鈕,若是沒有設置,則無效)
                      )

  • 小案例
from PyQt5.Qt import *
from PyQt5.QtWidgets import QMessageBox

app = QApplication([])
window = QWidget()
window.resize(300, 200)
window.move(300, 300)

def critical():
    api = QMessageBox.critical(window,  # 父窗口QWidget
                               '錯誤',  # 窗口標題
                               "這是一個錯誤彈窗",  # 窗口提示信息
                               QMessageBox.Cancel | QMessageBox.Close,
                               # 窗口內添加按鈕-QMessageBox.StandardButton,可重復添加使用 | 隔開;如果不寫,會有個默認的QMessageBox.StandardButton
                               QMessageBox.Cancel,  # 設置默認按鈕(前提是已經設置有的按鈕,若是沒有設置,則無效)
                               )
    if api == QMessageBox.Cancel:
        label.setText("您選擇了Cancel")
    elif api == QMessageBox.Close:
        label.setText("您選擇了Close")


btn = QPushButton(window)
btn.setText('錯誤')
btn.move(20, 80)
btn.clicked.connect(critical)

label = QLabel(window)
label.resize(120, 30)
label.move(20, 30)

window.show()
app.exec_()


  1. 警告彈窗
  • 使用 QMessageBox.warning() 方法
    warning = QMessageBox()  # 創建QMessageBox()對象
    warning.setIcon(QMessageBox.Warning)  # 設置彈窗的QMessageBox.Icon類型
    warning.setWindowTitle('警告')  # 設置彈窗標題
    warning.setText("這是一個警告彈窗")  # 設置彈窗提示信息
    warning.setStandardButtons(QMessageBox.Ok | QMessageBox.Close)  # 設置彈窗的按鈕;可以添加多個,使用 | 隔開
    off = warning.addButton('取消', QMessageBox.RejectRole)  # 使用 addButton() 方法添加自定義按鈕
    api = warning.exec_()  # 指定退出鍵;返回選中按鈕的值

  • 小案例
from PyQt5.Qt import *
from PyQt5.QtWidgets import QMessageBox

app = QApplication([])
window = QWidget()
window.resize(300, 200)
window.move(300, 300)


def warning():
    warning = QMessageBox()  # 創建QMessageBox()對象
    warning.setIcon(QMessageBox.Warning)  # 設置彈窗的QMessageBox.Icon類型
    warning.setWindowTitle('警告')  # 設置彈窗標題
    warning.setText("這是一個警告彈窗")  # 設置彈窗提示信息
    ok = warning.addButton('確認', QMessageBox.AcceptRole)  # 使用 addButton() 方法添加自定義按鈕
    quit = warning.addButton('退出', QMessageBox.RejectRole)
    warning.setDefaultButton(quit)    # 設置默認按鈕
    api = warning.exec_()  # 指定退出鍵;返回選中按鈕的值
    if api == QMessageBox.AcceptRole:
        label.setText("您選中了確認")
    elif api == QMessageBox.RejectRole:
        label.setText("您選中了退出")


btn = QPushButton(window)
btn.setText('警告')
btn.move(20, 80)
btn.clicked.connect(warning)

label = QLabel(window)
label.resize(120, 30)
label.move(20, 30)

window.show()
app.exec_()


  1. 詢問彈窗
  • 使用 QMessageBox.question 方法
QMessageBox.question(window,
                     '確認',
                     '這是一個詢問彈窗',
                     )

  • 小案例
from PyQt5.Qt import *
from PyQt5.QtWidgets import QMessageBox

app = QApplication([])
window = QWidget()
window.resize(300, 200)
window.move(300, 300)


def question():
    question = QMessageBox.question(window,
                                    '確認',
                                    '這是一個詢問彈窗',
                                    )
    if question == QMessageBox.Yes:
        label.setText("您選擇了Yes")
    else:
        label.setText("您選擇了No")


btn = QPushButton(window)
btn.setText('錯誤')
btn.move(20, 80)
btn.clicked.connect(question)

label = QLabel(window)
label.resize(120, 30)
label.move(20, 30)

window.show()
app.exec_()


  1. 信息提示框
  • 使用 QMessageBox.information 方法
    info = QMessageBox()
    info.setIcon(QMessageBox.Information)
    info.setWindowTitle('信息')
    info.setText("這一個信息提示彈窗")
    info.addButton("確認", QMessageBox.AcceptRole)
    info.addButton("取消", QMessageBox.RejectRole)
    info.addButton("忽略", QMessageBox.DestructiveRole)
    api = info.exec_()

  • 使用 QMessageBox.about 方法
QMessageBox.about(window,
                  '關於',
                  "這是關於信息彈窗",
                  )

  • 小案例
from PyQt5.Qt import *
from PyQt5.QtWidgets import QMessageBox

app = QApplication([])
window = QWidget()
window.resize(300, 200)
window.move(300, 300)


def information():
    info = QMessageBox()
    info.setIcon(QMessageBox.Information)
    info.setWindowTitle('信息')
    info.setText("這一個信息提示彈窗")
    info.addButton("確認", QMessageBox.AcceptRole)
    info.addButton("取消", QMessageBox.RejectRole)
    info.addButton("忽略", QMessageBox.DestructiveRole)
    api = info.exec_()
    if api == QMessageBox.AcceptRole:
        label.setText("您選擇了確認")
    elif api == QMessageBox.RejectRole:
        label.setText("您選擇了取消")
    else:
        label.setText("您選擇了忽略")


def about():
    QMessageBox.about(window,
                      '關於',
                      "這是關於信息彈窗",
                      )


btn = QPushButton(window)
btn.setText('提示信息')
btn.move(20, 80)
btn.clicked.connect(information)

btn1 = QPushButton(window)
btn1.setText("關於")
btn1.move(150, 80)
btn1.clicked.connect(about)

label = QLabel(window)
label.resize(120, 30)
label.move(20, 30)

window.show()
app.exec_()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM