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_()

 
转:https://www.cnblogs.com/itwangqiang/articles/14955828.html
posted @ 2023-03-01 17:57  rmticocean  阅读(2207)  评论(0编辑  收藏  举报