【转】PyQt4 精彩实例分析 实例 1 Hello Jakey!
本系列文章均转自:ChumpKlutz(朽木)的博客【但是现在他好像都删掉了】
没有完全按照他的示例和代码,有自己的些许改动:
系统:Ubuntu14.04
python版本:python2.7.6
本实例实现一个"Hello Kitty!"例子,简单介绍 Qt 编程的基本流程,以及 Qt 程序的编绎运行方式,实例
效果图如图所示。

这是一个简单的例子,整个对话框只有一个按钮,单击该按钮,对话框关闭,退出程序。
实现的代码如下:
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 from PyQt4.QtGui import *
5 from PyQt4.QtCore import *
6 import sys
7
8 def main():
9 app = QApplication(sys.argv)
10 btn = QPushButton("Hello Jakey!")
11 btn.show()
12 app.connect(btn, SIGNAL("clicked()"), app, SLOT("quit()"))
13 app.exec_()
14
15 if __name__ == '__main__':
16 main()
第 4行导入 PyQt4.QtGui 的所有类及模块,包括 QApplication,所有 Qt 图形化应用程序都必须包含此文
件,它包含了 Qt 图形化应用程序的各种资源,基本设置,控制流以及事件处理等。
第 9 行新创建了一个 QApplication 对象,每个 Qt 应用程序都必须有且只有一个 QApplication 对象,采
用 sys.argv 作为参数,便于程序处理命令行参数。
第 10 行创建了一个 QPushButton 对象,并设置它的显示文本为“Hello Jakey!”,由于此处并没有指定按
钮的父窗体,因此以自己作为主窗口。
第 11 行调用 show()方法,显示此按钮。控件被创建时,默认是不显示的,必须调用 show()函数来显示它。
第 12行的 connect 方法是 Qt 最重要的特征,即信号与槽的机制。当按钮被按下则触发 clicked 信号,与之
相连的 QApplication 对象的槽 quit()响应按钮单击信号,执行退出应用程序的操作。关于信号与槽机制
在本实例最后将进行详细的分析。
最后调用 QApplication 的 exec_()方法,程序进入消息循环,等待可能输入进行响应。Qt 完成事件处理
及显示的工作,并在应用程序退出时返回 exec_()的值。
最后执行程序即可出现上图所示的对话框,一个简单的 Hello Jakey!例子完成。
信号与槽机制作为 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))

浙公网安备 33010602011771号