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表示单击该按钮将导致破坏性更改(例如“丢弃更改”)并关闭对话框
- 错误弹窗
- 使用 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_()
- 警告弹窗
- 使用 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_()
- 询问弹窗
- 使用 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_()
- 信息提示框
- 使用 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