前言
消息框控件(QMessageBox)是一个在图形用户界面(GUI)中常用的对话框控件,它用于显示一条信息或一个警告给用户。消息框通常用于告知用户关于程序的一些操作结果,比如文件保存成功、操作失败、提醒用户进行某些操作等。
消息框
在消息框控件(QMessageBox)中有以下方法
方法 | 类型 |
---|---|
question | 询问框 |
information | 信息框 |
warning | 警告框 |
critical | 错误框 |
about | 关于框 |
例子
QMessageBox中的消息框
在这里以question为例给出案例
from PyQt5.QtWidgets import *
import sys
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.button = QPushButton('点我')
self.button.clicked.connect(self.change_text)
h_layout = QHBoxLayout()
h_layout.addWidget(self.button)
self.setLayout(h_layout)
def change_text(self):
choice = QMessageBox.question(self, '询问框', '请做出你的选择',
QMessageBox.Yes|QMessageBox.No)
print("询问框的选择是:", "Yes" if choice == QMessageBox.Yes else "No")
choice = QMessageBox.question(self, '信息框', '请做出你的选择',
QMessageBox.Yes | QMessageBox.No)
print("信息框的选择是:", "Yes" if choice == QMessageBox.Yes else "No")
choice = QMessageBox.warning(self, '警告框', '请做出你的选择',
QMessageBox.Yes | QMessageBox.No)
print("警告框的选择是:", "Yes" if choice == QMessageBox.Yes else "No")
choice = QMessageBox.critical(self, '错误框', '请做出你的选择',
QMessageBox.Yes | QMessageBox.No)
print("错误框的选择是:", "Yes" if choice == QMessageBox.Yes else "No")
QMessageBox.about(self, '关于框', "这是一个显示信息的框")
if __name__ == '__main__':
app = QApplication([])
win = Window()
win.show()
sys.exit(app.exec())
在QMessageBox中提供了常用的按钮,按钮如下:
- QMessageBox.Ok
- QMessageBox.Yes
- QMessageBox.No
- QMessageBox.Close
- QMessageBox.Cancel
- QMessageBox.Open
- QMessageBox.Save
如果要加入多个按钮,只需要使用|
分割即可。
当想要根据选择处理相关事件时,只需使用如if choice == QMessageBox.Yes
的方式进行判断即可。
运行结果如下:
按下按钮后弹出若干个窗口
如果交替选择Yes和No,结果如下
询问框的选择是: Yes
信息框的选择是: No
警告框的选择是: Yes
错误框的选择是: No
自定义带中文按钮的消息框
自定义消息框需要先构建QMessageBox的子类,使用addButton添加按钮,这个时候就可以自行设定按钮展示的文字了
from PyQt5.QtWidgets import *
import sys
class QuestionMessageBox(QMessageBox):
def __init__(self, parent, title, content):
super(QuestionMessageBox, self).__init__(parent)
self.setWindowTitle(title)
self.setText(content)
self.setIcon(QMessageBox.Question)
self.addButton('确认', QMessageBox.AcceptRole)
self.addButton('取消', QMessageBox.RejectRole)
self.addButton('是', QMessageBox.YesRole)
self.addButton('否', QMessageBox.NoRole)
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.button = QPushButton('点我')
self.button.clicked.connect(self.change_text)
h_layout = QHBoxLayout()
h_layout.addWidget(self.button)
self.setLayout(h_layout)
def change_text(self):
msb_box = QuestionMessageBox(self, '标题', '做出你的选择')
msb_box.exec()
print(msb_box.clickedButton().text())
if __name__ == '__main__':
app = QApplication([])
win = Window()
win.show()
sys.exit(app.exec())
当需要根据选择进行相应的操作时可以使用类似于if msb_box.clickedButton().text() == '是'
的方式进行判断
运行结果如下