实例 1 Hello Kitty! ................................................................................................................ 2
实例 2 标准对话框的使用 .................................................................................................. 5
实例 3 各类位置信息......................................................................................................... 10
实例 4 使用标准输入框 .................................................................................................... 15
实例 5 各种消息框的使用 ................................................................................................ 21
实例 6 实现 QQ 抽屉效果................................................................................................. 29
实例 7 表格的使用 ............................................................................................................. 34
实例 8 使用进度条 ............................................................................................................. 36
实例 9 利用 Qt Designer 设计一个对话框 ...................................................................... 40
实例 10 在程序中使用 Ui ................................................................................................. 47
实例 11 动态加载 Ui .......................................................................................................... 52
实例 12 基本布局管理....................................................................................................... 53
实例 13 多文档 ................................................................................................................... 60
实例 14 分割窗口 ............................................................................................................... 65
实例 15 停靠窗口 ............................................................................................................... 69
实例 16 堆栈窗口 ............................................................................................................... 74
实例 17 综合布局实例....................................................................................................... 76
实例 18 可扩展对话框....................................................................................................... 86
实例 19 利用 QPalette 改变控件颜色 .............................................................................. 90
实例 20 窗体的淡入淡出效果 .......................................................................................... 97
实例 21 不规则窗体 .........................................................................................................107
实例 22 电子钟 ................................................................................................................. 110
实例 23 程序启动画面..................................................................................................... 114
实例 24 基本 QMainWindow 主窗口程序 .................................................................... 117
实例 25 打印文本 .............................................................................................................125
实例 26 打印图像 .............................................................................................................128
实例 1 Hello Kitty!
分类: -- PyQt4 2010-12-02 17:01 2723 人阅读 评论(8) 收藏 举报
本实例实现一个"Hello Kitty!"例子,简单介绍 Qt 编程的基本流程,以及 Qt 程序的编绎运行
方式,实例效果图如图所示。
这是一个简单的例子,整个对话框只有一个按钮,单击该按钮,对话框关闭,退出程序。
实现代码如下:
[python] view plaincopyprint?
1. from PyQt4.QtGui import *
2. from PyQt4.QtCore import *
3. import sys
4.
5. app=QApplication(sys.argv)
6. b=QPushButton("Hello Kitty!")
7. b.show()
8. app.connect(b,SIGNAL("clicked()"),app,SLOT("quit()"))
9. app.exec_()
第 1 行导入 PyQt4.QtGui 的所有类及模块,包括 QApplication,所有 Qt 图形化应用程序都
必须包含此文件,它包含了 Qt 图形化应用程序的各种资源,基本设置,控制流以及事件处
理等。
第 5 行新创建了一个 QApplication 对象,每个 Qt 应用程序都必须有且只有一个 QApplication
对象,采用 sys.argv 作为参数,便于程序处理命令行参数。
第 6 行创建了一个 QPushButton 对象,并设置它的显示文本为“Hello Kitty!”,由于此处并
没有指定按钮的父窗体,因此以自己作为主窗口。
第 7 行调用 show()方法,显示此按钮。控件被创建时,默认是不显示的,必须调用 show()
函数来显示它。
第 8 行的 connect 方法是 Qt 最重要的特征,即信号与槽的机制。当按钮被按下则触发 clicked
信号,与之相连的 QApplication 对象的槽 quit()响应按钮单击信号,执行退出应用程序的操
作。关于信号与槽机制在本实例最后将进行详细的分析。
最后调用 QApplication 的 exec_()方法,程序进入消息循环,等待可能输入进行响应。Qt
完成事件处理及显示的工作,并在应用程序退出时返回 exec_()的值。
最后执行程序即可出现上图所示的对话框,一个简单的 Hello Kitty!例子完成。
信号与槽机制作为 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))
注:本文基本上是经过改编的《Linux 窗口程序设计--Qt4 精彩实例分析》一书的 PyQt4 for
windows 版本
可以这么写: b.clicked.connect(app.quit)
这样就少了一些 hardcode 的字符串了,更加 pythonic
实例 2 标准对话框的使用
分类: -- PyQt4 2010-12-03 10:34 2105 人阅读 评论(2) 收藏 举报
和大多数操作系统一样,Windows 及 Linux 都提供了一系列的标准对话框,如文件选择,
字体选择,颜色选择等,这些标准对话框为应用程序提供了一致的观感。Qt 对这些标准对
话框都定义了相关的类,这些类让使用者能够很方便地使用标准对话框进行文件,颜色以及
字体的选择。标准对话框在软件设计过程中是经常需要使用的。
Qt 提供的标准对话框除了本实例提到的,还有 QErrorMessage,QInputDialog,
QMessageBox,QPrintDialog,QProcessDialog 等,这些标准对话框的使用在本书的后续
部分将会陆续介绍。
本实例主要演示上面几种标准对话框的使用,如下图所示
在上图中,单击“文件对话框”按钮,会弹出文件选择对话框,选中的文件名将显示在右连,
单击“颜色对话框”按钮,会弹出颜色选择对话框,选中的颜色将显示在右边,单击“字体对话
框”按钮,会弹出字体选择对话框,选中的字体将更新右边显示的字符串。
实现代码如下:
[python] view plaincopyprint?
1. # -*- coding: utf-8 -*-
2. from PyQt4.QtGui import *
3. from PyQt4.QtCore import *
4. import sys
5.
6. QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
7.
8. class StandardDialog(QDialog):
9.
10. def __init__(self,parent=None):
11. super(StandardDialog,self).__init__(parent)
12.
13. self.setWindowTitle("Standard Dialog")
14.
15. filePushButton=QPushButton(self.tr("文件对话框"))
16. colorPushButton=QPushButton(self.tr("颜色对话框"))
17. fontPushButton=QPushButton(self.tr("字体对话框"))
18.
19. self.fileLineEdit=QLineEdit()
20. self.colorFrame=QFrame()
21. self.colorFrame.setFrameShape(QFrame.Box)
22. self.colorFrame.setAutoFillBackground(True)
23. self.fontLineEdit=QLineEdit("Hello World!")
24.
25. layout=QGridLayout()
26. layout.addWidget(filePushButton,0,0)
27. layout.addWidget(self.fileLineEdit,0,1)
28. layout.addWidget(colorPushButton,1,0)
29. layout.addWidget(self.colorFrame,1,1)
30. layout.addWidget(fontPushButton,2,0)
31. layout.addWidget(self.fontLineEdit,2,1)
32.
33. self.setLayout(layout)
34.
35. self.connect(filePushButton,SIGNAL("clicked()"),self.openFile)
36. self.connect(colorPushButton,SIGNAL("clicked()"),self.openColor)
37. self.connect(fontPushButton,SIGNAL("clicked()"),self.openFont)
38.
39. def openFile(self):
40.
41. s=QFileDialog.getOpenFileName(self,"Open file dialog","/","Python files(*
.py)")
42. self.fileLineEdit.setText(str(s))
43.
44. def openColor(self):
45.
46. c=QColorDialog.getColor(Qt.blue)
47. if c.isValid():
48. self.colorFrame.setPalette(QPalette(c))
49.
50. def openFont(self):
51.
52. f,ok=QFontDialog.getFont()
53. if ok:
54. self.fontLineEdit.setFont(f)
55.
56. app=QApplication(sys.argv)
57. form=StandardDialog()
58. form.show()
59. 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 类的一个静态方法,返回用户选择的文件名,如果用户选择取消,则返回一个
空串。函数形式如下:
QString getOpenFileName (QWidget parent = None, QString caption = QString(), QString
directory = QString(), QString filter = QString(), Options options = 0)
QString getOpenFileName (QWidget parent = None, QString caption = QString(), QString
directory = QString(), QString filter = QString(), QString selectedFilter = None, Options
options = 0)
调用 getOpenFileName()函数将创建一个模态的文件对话框,如下图所示。directory 参数
指定了默认的目录,如果 directory 参数带有文件名,则该文件将是默认选中的文件,filter
参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,filter 可以同时指定多种
过滤方式供用户选择,多种过滤器之间用";;"隔开,用户选择的过滤器通过参数 selectedFilter
返回。
QFileDialog 类还提供了类似的其他静态函数,如下表,通过这些函数,用户可以方便地定
制自己的文件对话框。