与一般按顺序执行的控制台模式的应用程序不同,基于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
|
import sys from PyQt4 import QtGui from PyQt4 import QtCore
def window(): app = QtGui.QApplication(sys.argv) w = QtGui.QWidget() w.setGeometry(100,100,400,300) w.setWindowTitle('test')
b = QtGui.QLabel(w) b.setText('hello world')
c = QtGui.QPushButton(w) c.setText("button1") c.move(100,50) c.clicked.connect(slot_function)
d = QtGui.QPushButton(w) d.setText('button2') d.move(100,80) QtCore.QObject.connect(d,QtCore.SIGNAL("clicked()"),slot_function)
w.show() sys.exit(app.exec_())
def slot_function(): print 'aa' if __name__ == '__main__': window()
|