PyQt4-精彩实例分析(语法高亮带书签)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

PyQt4精彩实例分析实例1HelloKitty!本实例实现一个HelloKitty!例子,简单介绍Qt编程的基本流程,以及Qt程序的编绎运行方式,实例效果图如图所示。这是一个简单的例子,整个对话框只有一个按钮,单击该按钮,对话框关闭,退出程序。实现代码如下:第1行导入PyQt4.QtGui的所有类及模块,包括QApplication,所有Qt图形化应用程序都必须包含此文件,它包含了Qt图形化应用程序的各种资源,基本设置,控制流以及事件处理等。第5行新创建了一个QApplication对象,每个Qt应用程序都必须有且只有一个QApplication对象,采用sys.argv作为参数,便于程序处理命令行参数。第6行创建了一个QPushButton对象,并设置它的显示文本为“HelloKitty!”,由于此处并没有指定按钮的父窗体,因此以自己作为主窗口。第7行调用show()方法,显示此按钮。控件被创建时,默认是不显示的,必须调用show()函数来显示它。第8行的connect方法是Qt最重要的特征,即信号与槽的机制。当按钮被按下则触发clicked信号,与之相连的QApplication对象的槽quit()响应按钮单击信号,执行退出应用程序的操作。关于信号与槽机制在本实例最后将进行详细的分析。最后调用QApplication的exec_()方法,程序进入消息循环,等待可能输入进行响应。Qt完成事件处理及显示的工作,并在应用程序退出时返回exec_()的值。最后执行程序即可出现上图所示的对话框,一个简单的HelloKitty!例子完成。信号与槽机制作为Qt最重要的特性,提供了任意两个Qt对象之间的通信机制。其中,信号会在某个特定情况或动作下被触发,槽是用于接收并处理信号的函数。例如,要将一个窗口中的变化情况通知给另一个窗口,则一个窗口发送信号,另一个窗口的槽接收此信号并进行相应的操作,即可实现两个窗口之间的通信。这比传统的图形化程序采用回调函数的方式实现对象间通信要简单灵活得多。每个Qt对象都包含预定的信号和槽,当一某一特定事件发生时,一个信号被发射,与信号相关联的槽则会响应信号完成相应的处理。信号与槽机制常用的连接方式为:connect(Object1,SIGNAL(signal),Object2,SLOT(slot))signal为对象Object1的信号,slot为对象Object2的槽,Qt的窗口部件都包含若干个预定义的信号和若干个预定义的槽。当一个类被继承时,该类的信号和槽也同时被继承。开始人员也可以根据需要定义自己的信号和槽。信号与槽机制可以有多种连接方式,下图描述了信号与槽的多种可能连接方式。1.一个信号可以与另一个信号相连connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1))即表示Object1的信号1发射可以触发Object2的信号1发射。2.表示一个信号可以与多个槽相连connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2))connect(Object1,SIGNAL(signal2),Object3,SLOT(slot1))3.表示同一个槽可以响应多个信号connect(Object1,SIGNAL(signal2),Object2,SLOT(slot2))connect(Object3,SIGNAL(signal2),Object2,SLOT(slot2))PyQt4精彩实例分析实例2标准对话框的使用和大多数操作系统一样,Windows及Linux都提供了一系列的标准对话框,如文件选择,字体选择,颜色选择等,这些标准对话框为应用程序提供了一致的观感。Qt对这些标准对话框都定义了相关的类,这些类让使用者能够很方便地使用标准对话框进行文件,颜色以及字体的选择。标准对话框在软件设计过程中是经常需要使用的。Qt提供的标准对话框除了本实例提到的,还有QErrorMessage,QInputDialog,QMessageBox,QPrintDialog,QProcessDialog等,这些标准对话框的使用在本书的后续部分将会陆续介绍。本实例主要演示上面几种标准对话框的使用,如下图所示在上图中,单击“文件对话框”按钮,会弹出文件选择对话框,选中的文件名将显示在右连,单击“颜色对话框”按钮,会弹出颜色选择对话框,选中的颜色将显示在右边,单击“字体对话框”按钮,会弹出字体选择对话框,选中的字体将更新右边显示的字符串。实现代码如下:#-*-coding:utf-8-*-fromPyQt4.QtGuiimport*fromPyQt4.QtCoreimport*importsysQTextCodec.setCodecForTr(QTextCodec.codecForName(utf8))classStandardDialog(QDialog):def__init__(self,parent=None):super(StandardDialog,self).__init__(parent)self.setWindowTitle(StandardDialog)filePushButton=QPushButton(self.tr(文件对话框))colorPushButton=QPushButton(self.tr(颜色对话框))fontPushButton=QPushButton(self.tr(字体对话框))self.fileLineEdit=QLineEdit()self.colorFrame=QFrame()self.colorFrame.setFrameShape(QFrame.Box)self.colorFrame.setAutoFillBackground(True)self.fontLineEdit=QLineEdit(HelloWorld!)layout=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)self.setLayout(layout)self.connect(filePushButton,SIGNAL(clicked()),self.openFile)self.connect(colorPushButton,SIGNAL(clicked()),self.openColor)self.connect(fontPushButton,SIGNAL(clicked()),self.openFont)defopenFile(self):s=QFileDialog.getOpenFileName(self,Openfiledialog,/,Pythonfiles(*.py))self.fileLineEdit.setText(str(s))defopenColor(self):c=QColorDialog.getColor(Qt.blue)ifc.isValid():self.colorFrame.setPalette(QPalette(c))defopenFont(self):f,ok=QFontDialog.getFont()ifok:self.fontLineEdit.setFont(f)app=QApplication(sys.argv)form=StandardDialog()form.show()app.exec_()第6行设定tr方法使用utf8编码来解析文字。第13行设置程序的标题。第15到17行创建各个按钮控件。第19行创建一个QLineEdit类实例fileLineEdit,用来显示选择的文件名。第20行创建一个QFrame类实例colorFrame,当用户选择不同的颜色时,colorFrame会根据用户选择的颜色更新其背景。第23行创建一个QLineEdit类实例fontLineEdit,当用户选择不同的字体时,fontLineEdit会根据用户选择的字体更新其内容。第25到33行将各个控件进行布局。第35到37行将各个按钮的clicked信号相应的槽进行连接。slotFile()方法是文件对话框按钮的clicked信号的槽,其中getOpenFileName()是QFileDialog类的一个静态方法,返回用户选择的文件名,如果用户选择取消,则返回一个空串。函数形式如下:QStringgetOpenFileName(QWidgetparent=None,QStringcaption=QString(),QStringdirectory=QString(),QStringfilter=QString(),Optionsoptions=0)QStringgetOpenFileName(QWidgetparent=None,QStringcaption=QString(),QStringdirectory=QString(),QStringfilter=QString(),QStringselectedFilter=None,Optionsoptions=0)调用getOpenFileName()函数将创建一个模态的文件对话框,如下图所示。directory参数指定了默认的目录,如果directory参数带有文件名,则该文件将是默认选中的文件,filter参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,filter可以同时指定多种过滤方式供用户选择,多种过滤器之间用;;隔开,用户选择的过滤器通过参数selectedFilter返回。QFileDialog类还提供了类似的其他静态函数,如下表,通过这些函数,用户可以方便地定制自己的文件对话框。静态函数说明getOpenFileName获得用户选择的文件名getSaveFileName获得用户保存的文件名getExistingDirectory获得用户选择的已存在的目录名getOpenFileNames获得用户选择的文件名列表slotColor()函数是颜色对话框按钮clicked信号的槽。其中getColor()是QColorDialog的一个静态函数,返回用户选择的颜色值,函数形式如下:QColorQColorDialog.getColor(QColorinitial=Qt.white,QWidgetparent=None)QColorQColorDialog.getColor(QColor,QWidget,QString,ColorDialogOptionsoptions=0)调用getColor()函数将创建一个模态的颜色对话框,如下图所示。initial参数指定了默认的颜色,默认为白色,通过isValid()可以判断用户选择的颜色是否有效,若用户选择取消,isValid()将返回false。slotFont()函数是字体对话框按钮clicked信号的槽。其中getFont()是QFontDialog的一个静态函数,返回用户选择的字体,函数形式如下:(QFont,bool)getFont(QFont,QWidget,QString,FontDialogOptions)(QFont,bool)getFont(QFont,QWidget,QString)(QFont,bool)getFont(QFont,QWidgetparent=None)(QFont,bool)getFont(QWidgetparent=None)调用getFont()函数将创建一个模态的字体对话框,如下图所示。用户选择OK,函数返回

1 / 89
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功