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_())
效果图:
在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
参数五:默认选中哪个按钮
效果图:
这个information可以换成warning,question,critical等,它们对应的图标如下:
可以自定义添加的一些按钮类型如下:
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:
# 其它