PyQT,QMessageBox 使用介绍

来源:互联网 发布:查询火车票的软件 编辑:程序博客网 时间:2024/06/05 23:47

QMessageBox是一个非常好用的通知交互界面,刚开始使用的时候,一些按键和操作不清楚,走了一些弯路,通过网上搜索以及自己试用,分享一些经验:


1:针对QMessage,默认的按键只有(PyQt4)OK键,这个按键,如何知道被点击了,并进行操作呢?

通过实验发现,OK键被点击信号就是:QMessage.buttonClicked 然后通过 QMessage.buttonClicked.connect(self.okDefaultButtonDeal) 即可,进行处理。


2:当然,也可以自己定义多个按键:代码如下:然后通过customMsgBox.clickedButton()  来链接区分,或者直接使用button.clicked.connect()来操作。

        customMsgBox=QMessageBox(self)  
        lockButton=customMsgBox.addButton(self.tr("锁定"),  
                                          QMessageBox.ActionRole)  
        unlockButton=customMsgBox.addButton(self.tr("解锁"),  
                                            QMessageBox.ActionRole)  
        cancelButton=customMsgBox.addButton("cancel",QMessageBox.ActionRole)  
  
        customMsgBox.setText(self.tr("这是一个自定义消息框!"))  
        customMsgBox.exec_()    

        button=customMsgBox.clickedButton()  
        if button==lockButton:  
            self.label.setText("Custom MessageBox/Lock")  
        elif button==unlockButton:  
            self.label.setText("Custom MessageBox/Unlock")  
        elif button==cancelButton:  
            self.label.setText("Custom MessageBox/Cancel")  

其中,如果按照上面的方式操作, 必须使用exec_()  而不是show(),否则会无效。如果使用button.clicked.connect()来操作,就可以使用show了。


完整代码:

# -*- coding: utf-8 -*-   
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
import sys  , time
  
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))  
  
class MessageBoxDlg(QDialog):  
    def __init__(self,parent=None):  
        super(MessageBoxDlg,self).__init__(parent)  
        self.setWindowTitle("Messagebox")  
        self.label=QLabel("About Qt MessageBox")  
        questionButton=QPushButton("Question")  
        informationButton=QPushButton("Information")  
        warningButton=QPushButton("Warning")  
        criticalButton=QPushButton("Critical")  
        aboutButton=QPushButton("About")  
        aboutqtButton=QPushButton("About Qt")  
        self.customButton=QPushButton("Custom")  
  
        gridLayout=QGridLayout(self)  
        gridLayout.addWidget(self.label,0,0,1,2)  
        gridLayout.addWidget(questionButton,1,0)  
        gridLayout.addWidget(informationButton,1,1)  
        gridLayout.addWidget(warningButton,2,0)  
        gridLayout.addWidget(criticalButton,2,1)  
        gridLayout.addWidget(aboutButton,3,0)  
        gridLayout.addWidget(aboutqtButton,3,1)  
        gridLayout.addWidget(self.customButton,4,0)  
  
        self.connect(questionButton,SIGNAL("clicked()"),self.slotQuestion)  
        self.connect(informationButton,SIGNAL("clicked()"),self.slotInformation)  
        self.connect(warningButton,SIGNAL("clicked()"),self.slotWarning)  
        self.connect(criticalButton,SIGNAL("clicked()"),self.slotCritical)  
        self.connect(aboutButton,SIGNAL("clicked()"),self.slotAbout)  
        self.connect(aboutqtButton,SIGNAL("clicked()"),self.slotAboutQt)  
        self.customButton.clicked.connect(self.slotCustom)  
  
    def slotQuestion(self):  
        button=QMessageBox.question(self,"Question",  
                                    self.tr("已到达文档结尾,是否从头查找?"),  
                                    QMessageBox.Ok|QMessageBox.Cancel,  
                                    QMessageBox.Ok)  
        if button==QMessageBox.Ok:  
            self.label.setText("Question button/Ok")  
        elif button==QMessageBox.Cancel:  
            self.label.setText("Question button/Cancel")  
        else:  
            return  
  
    def slotInformation(self):  
        QMessageBox.information(self,"Information",  
                                self.tr("填写任意想告诉于用户的信息!"))  
        self.label.setText("Information MessageBox")  
  
    def slotWarning(self):  
        button=QMessageBox.warning(self,"Warning",  
                                   self.tr("是否保存对文档的修改?"),  
                                   QMessageBox.Save|QMessageBox.Discard|QMessageBox.Cancel,  
                                   QMessageBox.Save)  
        if button==QMessageBox.Save:  
            self.label.setText("Warning button/Save")  
        elif button==QMessageBox.Discard:  
            self.label.setText("Warning button/Discard")  
        elif button==QMessageBox.Cancel:  
            self.label.setText("Warning button/Cancel")  
        else:  
            return  
  
    def slotCritical(self):  
        QMessageBox.critical(self,"Critical",  
                             self.tr("提醒用户一个致命的错误!"))  
        self.label.setText("Critical MessageBox")  
  
    def slotAbout(self):  
        QMessageBox.about(self,"About",self.tr("About事例"))  
        self.label.setText("About MessageBox")  
  
    def slotAboutQt(self):  
        QMessageBox.aboutQt(self,"About Qt")  
        self.label.setText("About Qt MessageBox")  
  
    def slotCustom(self):  
        customMsgBox=QMessageBox(self)  
        customMsgBox.setWindowTitle("Custom message box")  
        lockButton=customMsgBox.addButton(self.tr("锁定"),  
                                          QMessageBox.ActionRole)  
        unlockButton=customMsgBox.addButton(self.tr("解锁"),  
                                            QMessageBox.ActionRole)  
        cancelButton=customMsgBox.addButton("cancel",QMessageBox.ActionRole)  
        cancelButton.clicked.connect(self.cancelButtonDeal)
        customMsgBox.setText(self.tr("这是一个自定义消息框!"))  
        customMsgBox.show()
        customMsgBox.exec_()    
        #time.sleep(10)
        button=customMsgBox.clickedButton()  
        if button==lockButton:  
            self.label.setText("Custom MessageBox/Lock")  
        elif button==unlockButton:  
            self.label.setText("Custom MessageBox/Unlock")  
        elif button==cancelButton:  
            self.label.setText("Custom MessageBox/Cancel")  
    def cancelButtonDeal(self):
        self.label.setText("Custom MessageBox/Cancel")  
app=QApplication(sys.argv)  
MessageBox=MessageBoxDlg()  
MessageBox.show()  
app.exec_()  

代码大部分来着http://blog.sina.com.cn/s/blog_9b78c9110101a18n.html ,我稍作修改,感谢Doris mm!

0 0
原创粉丝点击