PySide2学习记录(八):QMessageBox

Python2.7 或 Python3.7
PySide2 Version: 5.11.2
官方文档:http://doc.qt.io/qtforpython/index.html

# -*- coding:utf-8 -*-
from PySide2 import QtGui, QtWidgets, QtCore
import sys


class MyWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)

        self.setFixedSize(200, 120)

        self.btn_dialog = QtWidgets.QPushButton(u'弹出对话框')

        self.connect(self.btn_dialog, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT('openMessageBox()'))

        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.btn_dialog)
        self.setLayout(self.layout)

    @QtCore.Slot()
    def openMessageBox(self):
        msgBox = QtWidgets.QMessageBox()
        msgBox.setText(u'你好,世界!')
        msgBox.exec_()


app = QtWidgets.QApplication()
widget = MyWidget()
widget.show()
sys.exit(app.exec_())

效果图:

PySide2学习记录(八):QMessageBox_第1张图片
图1

在Qt中显示一个MessageBox只需要两步,一个是生成一个MessageBox对象(msgBox = QtWidgets.QMessageBox()),再一个就是启动这个MessageBox对象(msgBox.exec_())。
这个msgBox.exec_()同app.exec_()作用一样,都是开启一个消息循环,直到用户关闭这个窗口,然后返回一个值。只不过msgBox.exec_()是开启一个子消息循环,当结束后,就回到了主消息循环里面了,程序并没有结束。
msgBox.setText(u'你好,世界!')给MessageBox设置一个文本,如果不设置的话,MessageBox上就只有一个ok按钮,这个按钮是默认给我们生成的。上面这种产生MessageBox方式叫构造器生成,还可以利用QMessageBox类里面的静态方法来产生,比如:
QtWidgets.QMessageBox.information(self, u'Demo', u'hello world', QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok)
参数一:父对象
参数二:标题
参数三:正文
参数四:里面有哪些类型按钮,用"|"来添加多个按钮
比如:QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel
参数五:默认选中哪个按钮
效果图:

PySide2学习记录(八):QMessageBox_第2张图片
图2

这个information可以换成warning,question,critical等,它们对应的图标如下:

PySide2学习记录(八):QMessageBox_第3张图片
图3

可以自定义添加的一些按钮类型如下:
QMessageBox.Ok
QMessageBox.Open
QMessageBox.Save
QMessageBox.Cancel
QMessageBox.Close
QMessageBox.Discard
QMessageBox.Apply
QMessageBox.Reset
QMessageBox.RestoreDefaults
QMessageBox.Help
QMessageBox.SaveAll
QMessageBox.Yes
QMessageBox.YesToAll
QMessageBox.No
QMessageBox.NoToAll
QMessageBox.Abort
QMessageBox.Retry
QMessageBox.Ignore
QMessageBox.NoButton

举个例子:
图1只有一个ok,我再添加一个Cancel按钮,使用addButton()函数

    @QtCore.Slot()
    def openMessageBox(self):
        msgBox = QtWidgets.QMessageBox()
        msgBox.setText(u'你好,世界!')
        msgBox.addButton(QtWidgets.QMessageBox.Ok)
        msgBox.addButton(QtWidgets.QMessageBox.Cancel)
        msgBox.exec_()

注意,如果只写msgBox.addButton(QtWidgets.QMessageBox.Cancel)不写msgBox.addButton(QtWidgets.QMessageBox.Ok),那么ok按钮就会被替换成cancel,要想两个都显示,就需要一起添加。

用户点击按钮之后,如何来获取点击的哪个按钮呢
ret = msgBox.exec_()当对话框结束后,会返回一个值,通过这个值就能判断用户点击了哪个按钮。

if ret == QMessageBox.Save:
    # 保存按钮被点击
elif ret == QMessageBox.Discard:
    # 不保存按钮被点击
elif ret == QMessageBox.Cancel:
    # 取消按钮被点击
else:
    # 其它

你可能感兴趣的:(PySide2学习记录(八):QMessageBox)