0%

PyQt4--《二》信号和槽

与一般按顺序执行的控制台模式的应用程序不同,基于GUI的程序是由事件驱动的.事件events是响应用户动作的函数或方法,比如点击按钮、选择项目、鼠标点击等。

用来构建GUI界面的挂件Widgets是这些事件的来源。每个PyQt Widget,都派生自QObject类,用来发射“信号”signals来响应一个或多个事件。信号本身不执行动作,它们连接到“槽”slot上。“槽”是可调用的Python函数。
在PyQt中,信号和槽的连接有多种方式。
最常用的方式是:

1
QtCore.QObject.connect(need_connect_object,QtCore.SIGNAL('signalname'),solt_function)

更方便的方式是当widget发射signal时,调用slot函数:

1
widget.signal.connect(slot_function)

在第一个例子的基础上增加例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#-*-coding:utf-8-*-

import sys
from PyQt4 import QtGui #基本的GUI组件都存放在QtGui这个模块
from PyQt4 import QtCore

def window():
app = QtGui.QApplication(sys.argv)#每个Pyqt的程序都必须创建一个application对象,application在 QtGui 模块中,sys.argv 参数是命令行中的一组参数。
w = QtGui.QWidget()#创建窗口对象,QWidget窗口组件是PyQt4中所有用户界面对象的基类,这里直接使用QWidget默认的构造。
w.setGeometry(100,100,400,300)
w.setWindowTitle('test')

b = QtGui.QLabel(w)#添加一个QLabel对象
b.setText('hello world')

c = QtGui.QPushButton(w)#添加一个button
c.setText("button1")
c.move(100,50)
c.clicked.connect(slot_function)#绑定点击事件到方法2

d = QtGui.QPushButton(w)
d.setText('button2')
d.move(100,80)
QtCore.QObject.connect(d,QtCore.SIGNAL("clicked()"),slot_function)#绑定点击事件到方法1

w.show()
sys.exit(app.exec_())#app.exec_()其实就是QApplication的方法,原来这个exec_()方法的作用是“进入程序的主循环直到exit()被调用”,如果没有这个方法,运行的时候窗口会闪退。

def slot_function():
print 'aa'
if __name__ == '__main__':
window()