PyQt5 消息对话框

18 篇文章 0 订阅

学习消息对话框

大栗子

消息对话框主要涉及QMessageBox类。QMessageBox类提供了一个模态对话框,用于通知用户或询问用户问题并接收答案。

消息框显示主要文本以提醒用户情况,信息性文本以进一步解释警报或询问用户一个问题,以及可选的详细文本,以便在用户请求时提供更多数据。 消息框还可以显示用于接受用户响应的图标和标准按钮。

提供了两个使用QMessageBox的API,基于属性的API和静态函数。 调用静态函数是更简单的方法,但是比使用基于属性的API更不灵活,结果信息较少。 两种方法我们在程序中都使用了。
这里写图片描述
我们通过上面的动画可以看到一般而言,消息对话框分为五种,分别是提示信息、询问、警告、错误、关于,其中关于又分为两种,一种是一般性关于、另一种是关于Qt的介绍,可以明显看见不同。
先分析分析代码:

from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QMessageBox, QLabel, QCheckBox
from PyQt5.QtGui import QPixmap
import sys
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 330, 300)
        self.setWindowTitle('早点毕业吧--消息对话框')

        self.la = QLabel('这里将会显示我们选择的按钮信息',self)
        self.la.move(20,20)
        self.bt1 = QPushButton('提示',self)
        self.bt1.move(20,70)
        self.bt2 = QPushButton('询问',self)
        self.bt2.move(120,70)
        self.bt3 = QPushButton('警告',self)
        self.bt3.move(220,70)
        self.bt4 = QPushButton('错误',self)
        self.bt4.move(20,140)
        self.bt5 = QPushButton('关于',self)
        self.bt5.move(120,140)
        self.bt6 = QPushButton('关于Qt',self)
        self.bt6.move(220,140)

        self.bt1.clicked.connect(self.info)
        self.bt2.clicked.connect(self.question)
        self.bt3.clicked.connect(self.warning)
        self.bt4.clicked.connect(self.critical)
        self.bt5.clicked.connect(self.about)
        self.bt6.clicked.connect(self.aboutqt)

        self.show()
"""
这里我们描述了一个信息提示的对话框。
这个函数中我们显示的按钮分别是Ok、Close,默认按钮是Close。
标签上的信息会根据我们选择的按钮信息相应的变化,判断是选择了OK还是Close。
"""
    def info(self):
        reply = QMessageBox.information(self,'提示','这是一个消息提示对话框!', QMessageBox.Ok | QMessageBox.Close, QMessageBox.Close)
            if reply == QMessageBox.Ok:
                self.la.setText('你选择了Ok!')
            else:
                self.la.setText('你选择了Close!')
"""
这个函数与上一个函数的内容差不多,唯一不同的地方是,产生的消息对话框带了一个“?”
"""  
    def question(self):
        reply = QMessageBox.question(self,'询问','这是一个询问消息对话框,默认是No', QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel, QMessageBox.No)
        if reply == QMessageBox.Yes:
            self.la.setText('你选择了Yes!')
        elif reply == QMessageBox.No:
            self.la.setText('你选择了No!')
        else:
            self.la.setText('你选择了Cancel!')
"""
上面两种产生消息对话框的方式,就是调用静态函数的方式了,则重点讲解一下基于属性的调用。
这个函数我们分别使用了基于属性和静态函数的方式产生消息对话框,当然实际使用时需要注释一种。基于属性的产生消息对话框按钮可以显示中文。
"""
    def warning(self):
        # reply = QMessageBox.warning(self,'警告','这是一个警告消息对话框', QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel, QMessageBox.Save)
        cb = QCheckBox('所有文档都按此操作')#因为要在对话框中增加一个复选框,所以我新建了一个复选框对象,复选框的内容就是“所有文档都按此操作”
        msgBox = QMessageBox()
        """
    设置消息对话框的标题:警告。
    设置消息对话框的图标:QMessageBox.Warning,也就是警告图标,当然也可以选择QMessageBox.information、QMessageBox.question、QMessageBox.critical。
    设置消息对话框的要显示的消息框文本,如果文本格式设置(QMessageBox.textFormat),文本将被解释为纯文本或富文本。 默认设置为Qt.AutoText,即消息框将尝试自动检测文本的格式。
    设置消息对话框更完整描述的信息性文本,可以使用Infromative文本来扩展text()以向用户提供更多信息。 在Mac上,此文本以text()下方的小系统字体显示。 在其他平台上,它只是附加到现有文本。
     """
        msgBox.setWindowTitle('警告')
        msgBox.setIcon(QMessageBox.Warning)
        msgBox.setText('这是一个警告消息对话框')
        msgBox.setInformativeText('出现更改愿意保存吗?')
        Save = msgBox.addButton('保存', QMessageBox.AcceptRole)
        NoSave = msgBox.addButton('取消', QMessageBox.RejectRole)
        Cancel = msgBox.addButton('不保存', QMessageBox.DestructiveRole)
        msgBox.setDefaultButton(Save)#设置了默认的按钮是保存
        msgBox.setCheckBox(cb)
        """
    我们需要在消息对话框上设置之前建立的那个复选框。当我们选择这个复选框的时候产生了stateChanged信号,对应的将连接check()这个槽函数。
        """
        cb.stateChanged.connect(self.check)
        reply = msgBox.exec()#让消息对话框能够显示出来,并将我们选中的按钮返回给reply这个变量
"""
AcceptRole表示点击按钮可以接受对话框;
RejectRole表示单击该按钮将导致对话框被拒绝;
DestructiveRole表示单击该按钮将导致破坏性更改(例如“丢弃更改”)并关闭对话框。
"""
        if reply == QMessageBox.AcceptRole:
            self.la.setText('你选择了保存!')
        elif reply == QMessageBox.RejectRole:
            self.la.setText('你选择了取消!')
        else:
            self.la.setText('你选择了不保存!')

     def critical(self):
        # reply = QMessageBox.critical(self,'错误','这是一个错误消息对话框', QMessageBox.Retry | QMessageBox.Abort | QMessageBox.Ignore , QMessageBox.Retry)
        msgBox = QMessageBox()
        msgBox.setWindowTitle('错误')
        msgBox.setIcon(QMessageBox.Critical)
        msgBox.setText("这是一个错误消息对话框")
        msgBox.setStandardButtons(QMessageBox.Retry | QMessageBox.Abort | QMessageBox.Ignore)
        msgBox.setDefaultButton(QMessageBox.Retry)
        msgBox.setDetailedText('这是详细的信息:学点编程吧,我爱你!')#该属性保存要在详细信息区域中显示的文本。文本将被解释为纯文本。默认情况下,此属性包含一个空字符串
        reply = msgBox.exec() 

        if reply == QMessageBox.Retry:
            self.la.setText('你选择了Retry!')
        elif reply == QMessageBox.Abort:
            self.la.setText('你选择了Abort!')
        else:
            self.la.setText('你选择了Ignore!')
"""
这里我们同样用了两种方式建立关于消息对话框,重点说明第二种,即基于属性的。我们同样建立了QMessageBox对象,一开始的时候就将标题还有要显示的内容带入了,同时还表明这是一个没有图标的消息对话框。
然后我们这种对图标进行了设计,使用setIconPixmap()函数,注意参数必须是QPixmap类型的。
"""
     def about(self):
        #QMessageBox.about(self,'关于','这是一个关于消息对话框!')
        msgBox = QMessageBox(QMessageBox.NoIcon, '关于','不要意淫了,早点洗洗睡吧!')
        msgBox.setIconPixmap(QPixmap("beauty.png"))
        msgBox.exec()

     def aboutqt(self):
        QMessageBox.aboutQt(self,'关于Qt')
"""
这个比较好理解,self.sender()就是传递信号过来的对象,这里就是复选框;isChecked()返回的是一个布尔值,也就是判断是否被选中,选中了就显示打勾,否则就是不打勾。
"""
     def check(self):
        if self.sender().isChecked():
            self.la.setText('你打勾了哦')
        else:
            self.la.setText('怎么又不打了啊')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

ok!Just 这些!

具体运行结果参考:
https://zhuanlan.zhihu.com/p/29795495
谢谢 “学点编程吧”

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值