在實際的程序開發(fā)中,,經(jīng)常會用到各種各樣的消息框來給用戶一些提示或提醒,Qt提供了QMessageBox類來實現(xiàn)此項功能,。在本實例中,,分析了各種消息框的使用方式及之間的區(qū)別。各種消息框的使用如圖所示:
實現(xiàn)代碼如下:
- # -*- coding: utf-8 -*-
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
- import sys
-
-
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")
-
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(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.connect(customButton,SIGNAL("clicked()"),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)
-
-
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")
-
-
app=QApplication(sys.argv)
-
MessageBox=MessageBoxDlg()
-
MessageBox.show()
- app.exec_()
本實例主要分析7種類型的消息框,,包括Question消息框,,Information消息框,Warning消息框,,Critical消息框,,About消息框,About
Qt消息框以及Custom自定義消息框,。
Question消息框,,Information消息框,Warning消息框和Critical消息框的用法大同小異,,這些消息框一般都包含一條提示信息,,一個圖標以及若干個按鈕,它們的作用都是給用戶提供一些提醒或一些簡單的詢問,。按圖標的不同可區(qū)分為以下4個級另
Question:為正常的操作提供一個簡單的詢問,。
Information:為正常的操作提供一個提示。
Warning:提醒用戶發(fā)生了一個錯誤,。
Critical:警告用戶發(fā)生了一個嚴重錯誤,。
下面分別對各種消息框的使用方法進行分析。
下圖為Question消息框,。
關于Question消息框,,調(diào)用時直接使用QMessageBox.question()即可。
第一個參數(shù)為消息框的父窗口指針,。
第二個參數(shù)為消息框的標題欄,。
第三個參數(shù)為消息框的文字提示信息,前3個參數(shù)對于其他幾種消息框基本是一樣的,。
后面兩個參數(shù)都是對消息框按鈕的設定,,QMessageBox類提供了許多標準按鈕,,如QMessageBox.Ok,QMessageBox.Close,QMessageBox.Discard等,具體可查問Qt幫助,。
第四個參數(shù)即填寫希望在消息框中出現(xiàn)的按鈕,,可根據(jù)需要在標準按鈕中選擇,用“|”連寫,,默認為QMessageBox.Ok,。
第五個參數(shù)為默認按鈕,即消息框出現(xiàn)時,,焦點默認處于哪個按鈕上,。
函數(shù)的返回值為按下的按鈕,當用戶按下Escape鍵時,,相當于返回QMessageBox.Cancel,。
如下圖所示為Information消息框。
Information消息框使用頻率最高也最簡單,,直接調(diào)用QMessageBox.information()即可,。
第一個參數(shù)為消息框的父窗口指針。
第二個參數(shù)為消息框的標題欄,。
第三個參數(shù)為消息框的文字提示信息,。
后面的兩個參數(shù)與Qustion消息框的用法一樣,但在使用的過程中,,經(jīng)常會省略后兩個參數(shù),,直接使用默認的QMessageBox.Ok按鈕。
Information消息框和Question消息框可以通用,,使用權Question消息框的地方都可以使用Information消息框替換,。
如下圖所示為Warning消息框。
Warning消息框的最常用法為當用戶進行了一個非正常操作時,,提醒用戶并詢問是否進行某項操作,,如關閉文檔,提醒并詢問用戶是否保存對文檔的修改,。實例中實現(xiàn)的即是此操作,。
函數(shù)調(diào)用的方式與前面Question消息框的調(diào)用方式大致相同。
第一個參數(shù)為消息框的父窗口指針,。
第二個參數(shù)為消息框的標題欄,。
第三個參數(shù)為消息框的文字提示信息,
第四個參數(shù)為希望在消息框中出現(xiàn)的按鈕,,可根據(jù)需要在標準按鈕中選擇,,用“|”連寫,,默認為QMessageBox.Ok,。
第五個參數(shù)為默認按鈕,,即消息框出現(xiàn)時,焦點默認處于哪個按鈕上,。
如下圖所示為Critical消息框,。
Critical消息框是在系統(tǒng)出現(xiàn)嚴重錯誤時對用戶進行提醒的。它的用法也相對簡單,,通常情況下和Information消息框一樣,,在調(diào)用時只填寫前3個參數(shù)即可。
如下圖所示為About消息框,。
About消息框一般用于提供系統(tǒng)的版本等信息,。只需提供信息而并不需要用戶反饋信息,因此它的用法相對簡單,,直接調(diào)用QMessageBox.about(),,并只用指定消息框父窗口,標題欄以及信息的內(nèi)容即可,。
在介紹完以上幾種基本消息框的用法后,,還有兩種特殊的消息框類型,分別是“About Qt消息框”以及自定義消息框,。
如下圖所示為About Qt消息框,。
“About
Qt消息框”是Qt預定好的一種消息框,用于提供Qt的相關信息,,只需直接調(diào)用QMessageBox.aboutQt(),,并提定父窗口和標題欄即可,其中顯示的內(nèi)容是Qt預定義好的,。
最后,,當以上所有的消息框都不能滿足開發(fā)的需求時,Qt還允許Custom自定義消息框,。包括消息框的圖標,,按鈕,內(nèi)容等都可根據(jù)需要進行設定,。本實例中即實現(xiàn)了一個如下圖所示的自定義消息框,。
在slotCustom()函數(shù)中,第84行首先創(chuàng)建一個QMessageBox對象customMsgBox,。第85行設置此消息框的標題欄為Custom
message box,。
第86-90行定義消息框所需的按鈕,因此QMessageBox類提供了一個addButton()函數(shù)來為消息框增加自定義按鈕,,addButton()函數(shù)的第一個參數(shù)為按鈕顯示的文字,,第二個參數(shù)為按鈕類型的描述,具體可查閱QMessageBox.ButtonRole,,當然也可使用addButton()函數(shù)來加入一個標準按鈕,。如第90行在消息框中加入了一個QMessageBox.Cancel按鈕,。消息框將會按調(diào)用addButton()的先后次序在消息框中由左至右依次插入按鈕。
第92行調(diào)用setText設置自定義消息框中顯示的提示信息內(nèi)容,。
第93行調(diào)用exec()顯示此自定義消息框,。
后面幾行代碼完成的都是實例中一些顯示的功能,此處不再討論,。
通過本實例的分析可見,,Qt提供的消息框類型基本涵蓋了開發(fā)應用中使用的各種情況,并且提供了自定義消息框的方式,,滿足各種特殊的需求,,在實際應用中關鍵是分析實際的應用需求,根據(jù)不同的應用環(huán)境選擇最合適的消息框,,以使程序簡潔而合理,。
|