PyQt4精彩实例分析(语法高亮带书签)_第1页
PyQt4精彩实例分析(语法高亮带书签)_第2页
PyQt4精彩实例分析(语法高亮带书签)_第3页
PyQt4精彩实例分析(语法高亮带书签)_第4页
PyQt4精彩实例分析(语法高亮带书签)_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PyQt4精彩实例分析实例1HelloKitty!本实例实现一个Fell。口Kitty!例子,简单介绍Qt编程的基本流程,以及Qt程序的编绎运行方式实例效果图如图所示。这是一个简单的例子,整个对话框只有一个按钮,单击该按钮,对话框关闭,退出程序。实现代码如下:pytton口曲01.020304050-6070S09fromPyQt4uQtGuiimport*fromPyQt4QtCoreimport*sysapp=QApplication(sys-argv)b=QPu.shBut:tonf1HelloKitty,Jbshow()app.conne匚t:brSICTIALC1die:ked)fa

2、pp,SLOTquit)app.exeu_(第1行导入PyQt4.QtGui勺所有类及模块,包括Application所有Qt图形化应用程序都必须包含此文件,它包含了Qt图形化应用程序的各种资源,基本设置,控制流以及事件处理等。第5行新创建了一个QApplicatior对象,每个Qt应用程序都必须有且只有一QApplicatior对象,采用sys.argV乍为参数,便于程序处理命令行参数。第6行创建了一个QPushButtor对象,并设置它的显示文本为HelloDKitty”,由于此处并没有指定按钮的父窗体,因此以自己乍为主窗口。第7行调用show()方法,显示此按钮。控件被创建时,默认是不显

3、示的,必须调用ow()函数来显示它。第8行的connect方法是Qt最重要的特征,即信号与槽的机制。当按钮被按下则触Clicked信号,与之相连的QApplicatior对象的槽quit()向应按钮单击信号,执行退出应用程序的操作。关于信号与槽机制在本实例最后将进行详细的分析。最后调用QApplicatio的exec_(方法,程序进入消息循环,等待可能输入进行响应Qt完成事件处理及显示的工作,并在应用程序退出时返回xec_()勺值。最后执行程序即可出现上图所示的对话框,一个简单HfelloDKitty例子完成。信号与槽机制作为Qt最重要的特性,提供了任意两个Qt对象之间的通信机制。其中,信号会

4、在某个特定情况或动作下被触发,槽是用于接收并处理信号的函数。例如,要将一个窗口中的变化情况通知给另一个窗口,则一个窗口发送信号,另一个窗口的槽接收此信号并进行相应的操作,即可实现两个窗口之间的通信。这比传统的图形化程序采用回调函数的方式实现对象间通信要简单灵活得多。每个对象都包含预定的信号和槽,当一某一特定事件发生时,一个信号被发射,与信号相关联的槽则会响应信号完成相应的处理。信号与槽机制常用的连接方式为:connect(Object1,SIGNAL(signal),Object2,SLOT(slot)signal为对象Objectl的信号,slot为对象0bject2的槽,Qt的窗口部件都包

5、含若干个预定义的信号和若干个预定义的槽。当一个类被继承时,该类的信号和槽也同时被继承。开始人员也可以根据需要定义自己的信号和槽。信号与槽机制可以有多种连接方式,下图描述了信号与槽的多种可能连接方式。一个信号可以与另一个信号相连connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1)即表示Objectl的信号1发射可以触发0bject2的信号1发射。表示一个信号可以与多个槽相连connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2)connect(Object1,SIGNAL(signal2),O

6、bject3,SLOT(slot1)表示同一个槽可以响应多个信号connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2)connect(Object3,SIGNAL(signal2),Object2,SLOT(slot2)PyQt4精彩实例分析实例2标准对话框的使用和大多数操作系统一样,Windows及Linux都提供了一系列的标准对话框,如文件选择,字体选择,颜色选择等,这些标准对话框为应用程序提供了一致的观感。对这些标准对话框都定义了相关的类,这些类让使用者能够很方便地使用标准对话框进行文件,颜色以及字体的选择。标准对话框在软件设计过程中是经常

7、需要使用的。Qt提供的标准对话框除了本实例提到的,还有、一、QErrorMessageQInputDialogQMessageBoxQPrintDialogQProcessDialo等,这些标准对话框的使用在本书的后续部分将会陆续介绍。本实例主要示上种标准对话框的使用,如下图所示在上图中,单击“文件对话框”按钮,会弹出文件选择对话框,选中的文件名将显示在右连,单击“颜色对话框”按钮,会弹出颜色选择对话框,选中的颜色将显示在右边,单击“字体对话框”按钮,会弹出字体选择对话框,选中的字体将更新右边显示的字符串。实现代码如下:#-*-coding:utf-8-*-fromPyQt4.QtGuiimp

8、ort*fromPyQt4.QtCoreimport*importsysDDDDDDQTextCodec.setCodecForTr(QTextCodec.codecForNaumtef(8)DDDDDDclassStandardDialog(QDialog):DDDDDDdef_init_(self,parent=None):super(StandardDialog,self)._init_(parent)DDDDDDDDDDDDDDself.setWindowTitleS(tandardDialog)DDDDDDDDDDDDDD叮叮叮叮叮叮filePushButton二QPushButto

9、n(self.文件对话框)叮叮叮叮叮叮叮colorPushButton二QPushButton(self.颜色对话框)叮叮叮叮叮叮叮fontPushButton二QPushButton(self.字体对话框)叮DDDDDDself.fileLineEdit=QLineEdit()self.colorFrame=QFrame()self.colorFrame.setFrameShape(QFrame.Box)self.colorFrame.setAutoFillBackground(True)self.fontLineEdit=QLineEdiHte(lloWorld!)ODDODDlayout

10、=QGridLayout()layout.addWidget(filePushButton,0,0)layout.addWidget(self.fileLineEdit,0,1)layout.addWidget(colorPushButton,1,0)layout.addWidget(self.colorFrame,1,1)layout.addWidget(fontPushButton,2,0)layout.addWidget(self.fontLineEdit,2,1)ODDODDself.setLayout(layout)DDDDDDself.connect(filePushButton,

11、SIGNAL(clicked(),self.openFile)self.connect(colorPushButton,SIGNAL(clicked(),self.openColor)self.connect(fontPushButton,SIGNAL(clicked(),self.openFont)DDDDDDdefopenFile(self):DDDDDDDDDDDDDDs=QFileDialog.getOpenFileName(self,Openfiledialog,/,Pythonfiles(*.py)self.fileLineEdit.setText(str(s)DDDDDDdefo

12、penColor(self):DDDDDDc=QColorDialog.getColor(Qt.blue)ifc.isValid():self.colorFrame.setPalette(QPalette(c)DDDDDDdefopenFont(self):DDDDDDDDDf,ok=QFontDialog.getFont()ifok:self.fontLineEdit.setFont(f)DDDDDDapp=QApplication(sys.argv)form=StandardDialog()form.show()app.exec_()第6行设定tr方法使用utf8编码来解析文字。第13行设

13、置程序的标题。第15到17行创建各个按钮控件。第19行创建一个QLineEdit类实例fileLineEdit,用来显示选择的文件。第20行创建一个QFrame类实例colorFrame,当用选择不同的颜色时,colorFrame会根据用选择的颜色更新其背景。第23行创建一个QLineEdit类实例fontLineEdit,当用选择不同的字体时,fontLineEdit会根据用户选择的字体更新其内容。第25到33行将各个控件进行布局。第35到37行将各个按钮的clicked信号相应的槽进行连接。slotFile()方法是文件对话框按钮的clicked信号的槽,其中getOpenFileName

14、()是QFileDialog类的一个静态方法,返回用户选择的文件名,如果用户选择取消,则返回一个空串。函数形式如下:QStringgetOpenFileName(QWidgetparent=None,QStringcaption=QString(),QStringdirectory=QString(),QStringfilter=QString(),Optionsoptions=0)QStringgetOpenFileName(QWidgetparent=None,QStringcaption=QString(),QStringdirectory=QString(),QStringfilter

15、=QString(),QStringselectedFilter=None,Optionsoptions=0)调用getOpenFileName()函数将创建一个模的文件对话框,如下图所示。directory参数指定了默认的,如果directory参数有文件,则该文件将是默认选中的文件,filter参数对文件类进行过滤,只有与过滤器匹配的文件类型才显示,filter可以同时指定多种过滤方式供用户选择,多种过滤器之间用;开,用选择的过通过参数selectedFilterD返回。?X互拽范毘d):桌回我的文植我的电胞BookBocFilmHiAdenHusicDth.ei我疑近的文裆网上鄭居衣件名

16、购):-打开Python巳1_注軀.pjr).工j取消主件类型CD:|*本地磁盘(i:5?X?XQFileDialog类还提供了类的其函数,如下表,通过这些函数,用可以方便地定制自己的文件对话框。静态函数说明getOpenFileNamegetSaveFileNamegetExistingDirectorygetOpenFileNames得用户选择的文件名得用户保存的文件名得用户选择的已存在的目得用户选择的文件名列表?X?XslotColor()函数是颜色对话框按钮clicked信号的槽。其中getColor()是QColorDialog的一个函数,返回用户选择的颜色值,函数形式如下:QCol

17、orQColorDialog.getColor(QColorinitial=Qt.white,QWidgetparent=None)QColorQColorDialog.getColor(QColor,QWidget,QString,ColorDialogOptionsoptions=0)调用getColor()函数将创建一个模的颜色对话框,如下图所示。initial参数指定了默认的颜色,默认为色,通过isValid()可以用选择的颜色是有效,若用选择消,isvalid()将返回false。312偌宋宋体云魏怀羽黑楷岂卫中苗采融ill措琥朗行隶n宋艾文文立艾立文文文更情华华卑华华华华华华华求健

18、T前引EffectsIStrikenutUnddrlineWYi_tiitgSystemAi】y5:jjriplcslotFont()函数是字体对话框按钮clicked信号的槽。其中getFont()是QFontDialog的一个函数,返回用户选择的字体,函数形式如下:(QFont,bool)getFont(QFont,QWidget,QString,FontDialogOptions)(QFont,bool)getFont(QFont,QWidget,QString)(QFont,bool)getFont(QFont,QWidgetparent=None)(QFont,bool)getFon

19、t(QWidgetparent=None)调用getFont()函数将创建一个模的字体对话框,如下图所示。用选择0K,函数返回(用选择的字体,True),则返回(默认字体,False)Nornudl仿宋GB2312华丈审宋WormalIt:=LLicBoldBoldItalic:七itl老SystemOUrLlerline宋住-1FirnnSelectFont9&-8g10itig141618022SizePyQt4精彩实例分析实例3各类位置信息Qt提供了很多关于窗体置及显示大的函数,本实例用一个简单的对话框显示窗体的各种置信息,包括窗体的所在点位置,长,宽信息等。本实例的目的是分析各个有关位

20、置信息的函数之间的区别,如x(),y(),pos(),rect(),size(),geometr等,)以及在不同的情况下应使用个函数来置信息。实现的效果如下图:在实例中,分调用了x(),y(),frameGeometry(),pos(),geometry(),width(),height(),rect(),size()个函数,这个函数是QWidget提供的。当变对话框的大,或动对话框时,调用各个函数所获得的信息显示也相应地发生变化,从变化中可得知各函数之间的区别。由于本实例的目的是为了分析各函数之间的区别并获得结论,而程序本身的实现较为简单,因些只简单介绍实现过程。实现代码如下:fromPyQ

21、t4.QtCoreimportQ*DDfromPyQt4.QtGuiimport*importsysODDODDclassGeometry(QDialog):ODDODDdef_init_(self,parent=None):super(Geometry,self)._init_(parent)ODDODDself.setWindowTitleG(eometry)ODDODDLabel1=QLabelx(0:)Label2=QLabely(0:)Label3=QLabelf(rameGeometry():)Label4=QLabelp(os():)Label5=QLabelg(eometry(

22、):)Label6=QLabelw(idth():)Label7=QLabelh(eight():)Label8=QLabelr(ect():)Label9=QLabels(ize():)DDDDDDDDDDDDDDself.xLabel=QLabel()self.yLabel=QLabel()self.frameGeoLabel=QLabel()self.posLabel=QLabel()self.geoLabel=QLabel()self.widthLabel=QLabel()self.heightLabel=QLabel()self.rectLabel=QLabel()self.size

23、Label=QLabel()ODDODD?Xlayout=QGridLayout()layout.addWidget(Label1,0,0)layout.addWidget(self.xLabel,0,1)layout.addWidget(Label2,1,0)layout.addWidget(self.yLabel,1,1)layout.addWidget(Label3,2,0)layout.addWidget(self.frameGeoLabel,2,1)layout.addWidget(Label4,3,0)layout.addWidget(self.posLabel,3,1)layou

24、t.addWidget(Label5,4,0)layout.addWidget(self.geoLabel,4,1)layout.addWidget(Label6,5,0)layout.addWidget(self.widthLabel,5,1)layout.addWidget(Label7,6,0)layout.addWidget(self.heightLabel,6,1)layout.addWidget(Label8,7,0)layout.addWidget(self.rectLabel,7,1)layout.addWidget(Label9,8,0)layout.addWidget(se

25、lf.sizeLabel,8,1)DDDDDDself.setLayout(layout)DDDDDDself.updateLabel()DDDDDDdefmoveEvent(self,event):self.updateLabel()DDDDDDdefresizeEvent(self,event):self.updateLabel()DDDDDDdefupdateLabel(self):temp=QString()DDDDDDself.xLabel.setText(temp.setNum(self.x()self.yLabel.setText(temp.setNum(self.y()self

26、.frameGeoLabel.setText(temp.setNum(self.frameGeometry().x()+,+temp.setNum(self.frameGeometry().y()+,+temp.setNum(self.frameGeometry().width()+,+ODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDtemp.setNum(self.frameGeometry().height()DDDDDDself.posLabel.setText(temp.setNum(self.pos().x()+,+temp.setNum(self.po

27、s().y()self.geoLabel.setText(temp.setNum(self.geometry().x()+,+temp.setNum(self.geometry().y()+,+temp.setNum(self.geometry().width()+,+temp.setNum(self.geometry().height()self.widthLabel.setText(temp.setNum(self.width()self.heightLabel.setText(temp.setNum(self.height()self.rectLabel.setText(temp.set

28、Num(self.rect().x()+,+temp.setNum(self.rect().y()+,+temp.setNum(self.rect().width()+,+temp.setNum(self.rect().height()self.sizeLabel.setText(temp.setNum(self.size().width()+,+temp.setNum(self.size().height()DDDDDDDDDDDDDDDDDDDDapp=QApplication(sys.argv)form=Geometry()form.show()app.exec_()程序始化时调用upd

29、ateLabel()函数,以得各置函数的信息并显示。updateLabel()函数调用各个置函数得果并显示。重定义QWidget的moveEvent()和resizeEvent()函数,分响应对话框的动事件和调整大事件,使得窗体在被移动或窗体大小发生改变时,能同步更新各函数结果的显示。通过这个例子可以获得如下图所示的结论。widihOGameGewumyO-wkithOBffMTKJtryO.ieOx(),y()和pos()函数都是得整个窗体上的标置。frameGeometry()与geometry()相对应,frameGeometry()是得整个窗体的上和,值,geometry()函数得的是

30、窗体中的上标以及,值。接调用width()和height()函数得的是中的和的值。还有两个函数rect()和size(),调用它得的果也都是对于窗体的中的,size()得的是窗体中的,值,rect()与geometry()一样返回一个QRect对象。其中,两个函数得的,值是一样的,都是窗体中的,值,只是上标值不一样,geometry得的上标是相对于父窗体的标,rect()得的上标始为(0,0)。因此,在实际应用中需根据情况使用正确的位置信息函数以获得准确的位置尺寸信息,尤其是在编写对位置精度要求较高的程序时,如地图浏览程序,更应注意函数的选择,避免产生不必要的误差。在编程序时,始化窗体时最不要

31、使用setGeometry()函数,用resize()和move()函数代,因为使用setGeometry()会导致窗体show()之后在的置上很的一时间,来现象。PyQt4精彩实例分析实例4使用标准输入框本实例示如使用标准输入框,Qt提供了一个QInputDialog类,QInputDialog类提供了一种简单方的对话框来得用的单个输入信息,提供了4种数据类的输入,可以是一个字,一个Int类数据,一个double类数据或是一个下列表框的。其中包括一个提示标,一个输入控件。若是调用字输入框,则为一个QLineEdit若是调用Int类或double类,则为一个QSpinBox若是调用列表输入框,

32、则为一个QComboBox还包括一个定输入(Ok)按钮和一个消输入(Cancel按钮。本实例的实现效果如下图。实例中列举了以上4种输入类型,右则的按钮用于弹出标准输入对话框修改各条信息的值。具体实现代码如下所示:#-*-coding:utf-8-*-fromPyQt4.QtCoreimport*fromPyQt4.QtGuiimport*importsysDDDDDDQTextCodec.setCodecForTr(QTextCodec.codecForNaumtef(8)DDDDDDclassInputDlg(QDialog):def_init_(self,parent=None):supe

33、r(InputDlg,self)._init_(parent)DDDDDD叮叮叮叮叮叮labell二QLabel(self.tr()叮叮叮叮叮叮叮label2=QLabel(self.t性,)叮叮叮叮叮叮叮label3=QLabel(self.tr(,)叮叮叮叮叮叮叮label4=QLabel(self.tr(,)叮DDDDDDLabel二QLabelrehgWei)DDLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken)self.sexLabel=QLabel(self.tr()DDself.sexLabel.se

34、tFrameStyle(QFrame.Panel|QFrame.Sunken)self.ageLabel=QLabeJ25m)DDself.ageLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken)DDDDDDDDDDDDself.statureLabel=QLabel68)DDself.statureLabel.setFrameStyle(QFrame.Panel|QFrame.Sunken)DDDDDDDDDDDDDDDDDDnameButton二QPushButton(.,)DDDDDDDDDDDDDDsexButton二QPushButton(

35、.,)DDDDDDDDDDDDDDageButton二QPushButtonl,)dDDDDDDDDDDDDDstatureButton二QPushButton()DDDDDDDDDDDDDDDDDDDDself.connect(nameButton,SIGNAcLl(i,cked(),),self.slotName)DDDDDDDDDDDDDDself.connect(sexButton,SIGNAcLl(i,cked(),),self.slotSex)DDDDDDDDDDDDDDself.connect(ageButton,SIGNAcLl(i,cked(),),self.slotAge)

36、DDDDDDDDDDDDDDself.connect(statureButton,SIGNAcLl(i,cked(),),self.slotStature)DDDDDDDDDDDDDDDDDDDDlayout二QGridLayout()DDlayout.addWidget(label1,0,0)layout.addWidget(Label,0,1)layout.addWidget(nameButton,0,2)layout.addWidget(label2,1,0)layout.addWidget(self.sexLabel,1,1)layout.addWidget(sexB

37、utton,1,2)layout.addWidget(label3,2,0)layout.addWidget(self.ageLabel,2,1)layout.addWidget(ageButton,2,2)layout.addWidget(label4,3,0)layout.addWidget(self.statureLabel,3,1)layout.addWidget(statureButton,3,2)DDDDDDself.setLayout(layout)DDDDDDDDDDDDDDDDDDself.setwindowTitle(self.tr(资收)DDDDDDDDdefslotNa

38、me(self):DDDDDDDDDDDDname,ok=QInputDialog.getText(self,self.tr(用),DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDself.tr(输入新的字:),DDQLineEdit.Normal,Label.text()ifokand(notname.isEmpty():Label.setText(name)DDDDDDdefslotSex(self):list=QStringList()DDDDDDDDDDDDlist.append(self.tr()DDDDDDD

39、DDDDDDDlist.append(self.tr()DDDDDDDDDDDDDDsex,ok=QInputDialog.getItem(self,self.tr(性),self.tr(选择性),list)DDDDDDifok:self.sexLabel.setText(sex)DDDDDDdefslotAge(self):DDDDDDDDDDDDage,ok=QInputDialog.getlnteger(self,self.tr(),DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDself.tr(输入:),DDint(self.ageLabel.

40、text(),0,150)ifok:self.ageLabel.setText(str(age)DDDDDDdefslotStature(self):DDDDDDDDDDDDstature,ok二QInputDialog.getDouble(self,self.tr(),DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDself.tr(输入:),DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDODDfloat(self.statureLabel.text(),0,2300.00)ifok:self.stat

41、ureLabel.setText(str(stature)DDDDDDapp=QApplication(sys.argv)form=InputDlg()form.show()app.exec_()构造函数中声明了对话框中用到的控件以及各按钮触发的槽函数。单击后的按钮触发slotName()函数,出标准字输入对话框,如下图。调用QInputDialog的getText()函数出标准字输入对话框,getText()函数如下:(QString,boolok)QInputDialog.getText(QWidget,QString,QString,QLineEdit.EchoModemode=QLin

42、eEdit.Normal,QStringtext=QString(),Qt.WindowFlagsflags=0)此函数的第一个参数为标准输入对话框的父窗口,第二个参数为标准输入对话框的标题名,第三个参数为标准输入对话框的标提示,第个参数mode指定标准输入对话框中QLineEdit控件的输入模式,第个参数text为标准字输入对话框出时QLineEdit控件默认出现的文字,最后一个参数指标准输入对话框的窗体标识。slotName()函数中的第3行ok的值,若用单击了“0K”按钮,则新输入的新显示标。单击性后的按钮触发slotSex()函数,出标准选择对话框,如下图。第1,2,3行创建一个QSt

43、ringList对象,包括两个QString,用于标准输入对话框中下列表框的显示。第4行调用QInputDialog的getItem()函数出标准选择对话框,getItem()函数如下:(QString,boolok)getItem(QWidget,QString,QString,QStringList,intcurrent=0,booleditable=True,Qt.WindowFlagsflags=0)此函数的第一个参数为标准输入对话框的父窗窗口,第二个参数为标准输入对话框的标题名,第三个参数为标准输入对话框的标签提示,第四个参数指定标准输入对话框中QComboBox控件显示的可选条目,

44、为一个QStringList对象,第个参数current为标准选择对话框出时QComboBox控件中默认显示的序号,第个参数editable指定QComboBox控件中显示的文字是可编,最后一个参数指标准输入对话框的窗体标识。第6行ok的值,若用单击了“0K按钮,则新输入的性新显示标。单击后的按钮触发slotAge()函数,出标准int类输入对话框,如下图。调用QInputDialog的getInteger()函数出标准int类输入对话框,getInteger()函数如下:(int,boolok)getInteger(QWidget,QString,QString,intvalue=0,int

45、min=-2147483647,intmax=2147483647,intstep=1,Qt.WindowFlagsflags=0)此函数的第一个参数为标准输入对话框的父窗窗口,第二个参数为标准输入对话框的标题名,第三个参数为标准输入对话框的标提示,第个参数value指定标准输入对话框中QSpinBox控件默认显示值,第个参数指定QSpinBox控件的数值,第个参数step指定QSpinBox控件的进值。第4行ok的值,若用单击了“0K按钮,则新输入的值新显示标。单击后的按钮触发slotStature()函数,出标准double类输入对话框,如下图。调用QInputDialog的getDoub

46、le函数出标准double类输入对话框,getDouble()函数如下:(float,boolok)getDouble(QWidget,QString,QString,floatvalue=0,floatmin=-2147483647,floatmax=2147483647,intdecimals=1,Qt.WindowFlagsflags=0)此函数的第一个参数为标准输入对话框的父窗窗口,第二个参数为标准输入对话框的标题名,第三个参数为标准输入对话框的标提示,第个参数value指定标准输入对话框中QSpinBox控件默认显示值,第个参数指定QSpinBox控件的数值,第个参数decimals

47、口指定QSpinBox控件的进值。第4行ok的值,若用单击了“0K按钮,则新输入的值新显示标。?XPyQt4精彩实例分析实例5各种消息框的使用在实的程序开发中,经常会用到各种各样的消息框来给用一些提示或提,Qt提供了QMessageBoX类来实现此项功能。在本实例中,分析了各种消息框的使用方式及之间区的别。各种消息框的使用如图所示:实现代码如下:#-*-coding:utf-8-*-fromPyQt4.QtGuiimport*fromPyQt4.QtCoreimport*importsysDDDDDDQTextCodec.setCodecForTr(QTextCodec.codecForNau

48、mtef(8)DDDDDDclassMessageBoxDlg(QDialog):def_init_(self,parent=None):super(MessageBoxDlg,self)._init_(parent)self.setWindowTitleM(essagebox)self.label=QLabelA(boutQtMessageBox)questionButton=QPushButtoQnu(estion)informationButton=QPushButtoInn(formation)warningButton=QPushButtonW(arning)criticalButt

49、on=QPushButtoCnr(itical)aboutButton=QPushButtonA(bout)aboutqtButton=QPushButtonA(boutQt)customButton=QPushButtonC(ustom)DDDDDDgridLayout=QGridLayout(self)gridLayout.addWidget(self.label,0,0,1,2)gridLayout.addWidget(questionButton,1,0)gridLayout.addWidget(informationButton,1,1)gridLayout.addWidget(wa

50、rningButton,2,0)gridLayout.addWidget(criticalButton,2,1)gridLayout.addWidget(aboutButton,3,0)gridLayout.addWidget(aboutqtButton,3,1)gridLayout.addWidget(customButton,4,0)DDDDDDself.connect(questionButton,SIGNAcLl(icked(),self.slotQuestion)DDDDDDDDDDDDself.connect(informationButton,SIGNALc(licked(),s

51、elf.slotInformation)self.connect(warningButton,SIGNAcLl(icked(),self.slotWarning)self.connect(criticalButton,SIGNAcLl(icked(),self.slotCritical)self.connect(aboutButton,SIGNAcLl(icked(),self.slotAbout)self.connect(aboutqtButton,SIGNAcLl(icked(),self.slotAboutQt)self.connect(customButton,SIGNAcLl(ick

52、ed(),self.slotCustom)DDDDDDdefslotQuestion(self):button=QMessageBox.question(self,Question,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDself.tr(到文,是?),DDQMessageBox.Ok|QMessageBox.Cancel,QMessageBox.Ok)ifbutton=QMessageBox.Ok:self.label.setText(Questionbutton/Ok)elifbutton=QMessageBox.Cancel:self.label.s

53、etText(Questionbutton/Cancel)else:returnDDDDDDdefslotInformation(self):QMessageBrmation(self,Information,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDself.tr(任意于用的信息!)DDself.label.setText(InformationMessageBox)DDDDDDdefslotWarning(self):button=QMessageBox.warning(self,Warning,DDDDDDDDDDDDDDDDDDDDDDDDD

54、DDDDDDDDDDDDDDself.tr(是对文的?),DDQMessageBox.Save|QMessageBox.Discard|QMessageBox.Cancel,QMessageBox.Save)ifbutton=QMessageBox.Save:self.label.setText(Warningbutton/Save)elifbutton=QMessageBox.Discard:self.label.setText(Warningbutton/Discard)elifbutton=QMessageBox.Cancel:self.label.setText(Warningbutt

55、on/Cancel)else:returnDDDDDDdefslotCritical(self):QMessageBox.critical(self,Critical,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDself.tr(提用一个致命的!)DDself.label.setText(CriticalMessageBox)DDDDDDdefslotAbout(self):DDDDDDDDDDDDQMessageBox.about(self,About,self.tr(About事例)DDself.label.setText(AboutMessageBox)DDDDDDd

56、efslotAboutQt(self):QMessageBox.aboutQt(self,AboutQt)self.label.setText(AboutQtMessageBox)DDDDDDdefslotCustom(self):customMsgBox=QMessageBox(self)customMsgBox.setWindowTitle(Custommessagebox)DDDDDDDDDDDDlockButton二customMsgBox.addButton(self.tr(定),DDQMessageBox.ActionRole)DDDDDDDDDDDDunlockButton二cu

57、stomMsgBox.addButton(self.tr(),DDQMessageBox.ActionRole)cancelButton=customMsgBox.addButton(cancel,QMessageBox.ActionRole)DDDDDDDDDDDDDDDDDDcustomMsgBox.setText(self.tr(这是一个自定义消息框!)DDcustomMsgBox.exec_()DDDDDDbutton=customMsgBox.clickedButton()ifbutton=lockButton:self.label.setText(CustomMessageBox/

58、Lock)elifbutton=unlockButton:self.label.setText(CustomMessageBox/Unlock)elifbutton=cancelButton:self.label.setText(CustomMessageBox/Cancel)DDDDDDDapp=QApplication(sys.argv)MessageBox=MessageBoxDlg()MessageBox.show()app.exec_()本实例主要分析7种类的消息框,包括Question消息框,Information消息框,Warning消息框,Critical消息框,About消息

59、框,AboutQt消息框以及Custom自定义消息框。Question消息框,Information消息框,Warning消息框和Critical消息框的用法大同,这些消息框一般都包含一条提示信息,一个图标以及若干个按钮,它们的作用都是给用户提供一些提醒或一些简单的询问。按图标的不同可区分为以下4个级另Question:为常的操作提供一个简单的。Information:为常的操作提供一个提示。Warning:提用发生了一个。Critical:用发生了一个重。下面分别对各种消息框的使用方法进行分析。下图为Question消息框。?X关于Question消息框,调用时接使用QMessageBox.

60、question()即可。第一个参数为消息框的父窗口指针。第二个参数为消息框的标题栏。第三个参数为消息框的文字提示信息,前3个参数对于其他几种消息框基本是一样的。后面两个参数都是对消息框按钮的设定,QMessageBox类提供了许多标准按钮,如QMessageBox.Ok,QMessageBox.Close,QMessageBox.Discard等,体可Qt。第四个参数即填写希望在消息框中出现的按钮,可根据需要在标准按钮中选择,用“|”连写,默认为QMessageBox.Ok。第五个参数为默认按钮,即消息框出现时,焦点默认处于哪个按钮上。函数的返回值为按下的按钮,当用户按下Escape键时,相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论