PyQt之玩转signal(信号)与slot(槽)一:介绍及简单实例

信号与槽机制作为Qt最重要的特性,提供了任意两个QT对象之间的通信机制。其中,信号会在某个特定情况或动作下被触发,槽是用于接收并处理信号的函数。每个Qt对象都包含预定的信号和槽,当一某一特定事件发生时,一个信号被发射,与信号相关联的槽则会响应信号完成相应的处理。 信号与槽机制常用的连接方式为:   connect(Object1,SIGNAL(signal),Object2,SLOT(slot)) 上文说的两个对象,就体现在connect函数中的Object1和Object2,signal是Object1对象的信号,注意要用SIGNAL宏包起来。当一个特定事件发生的时候(如点击按钮)或者Object1调用emit函数的时候,signal信号被发射。slot(槽)就是一个可以被调用处理特定信号的函数(或方法),是普通的对象成员函数。 特点: 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)) 从以上特点可以看出信号和槽是宽松地联系在一起的:一个发射信号的对象不用知道也不用注意哪个槽或哪些槽要接收这个信号。对象只负责发送信号,它不知道也不需要知道另一端是谁在接收这个信号。同样的,一个槽也不知道是否有任何信号与自己相连接。

一个简单实例:点击close按钮关闭应用程序

import sysfrom PyQt4 import QtGui, QtCore::QtGui.QWidget.__init__(self)button = QtGui.QPushButton(‘close’, self)button.move(100, 60)self.connect(button, QtCore.SIGNAL(‘clicked()’), self, QtCore.SLOT(‘close()’))self.setWindowTitle(‘Signal & slot’)self.resize(250, 150)app = QtGui.QApplication(sys.argv)ex = Example()ex.show()sys.exit(app.exec_())

核心代码就是self.connect那一行,第一个参数时button,表示由button来发射信号;第二个参数表示button状态改变的时候(此处是点击)发射clicked()信号;第三个表示接收信号的对象,此处是self,表示Example对象;第四个参数表示接收到clicked()信号后应该调用的函数,此处是close(),close()函数继承自父类QWidget,表示关闭窗口。 所以如果点击了button按钮后,,button会发射clicked()信号,该信号会导致self对象的槽函数close()被执行,而close()的效果就是关闭窗口。所以点击button后,最终的效果就是窗口被关闭。

PyQt视频教程见:

经受雨,面对另一个轮回。

PyQt之玩转signal(信号)与slot(槽)一:介绍及简单实例

相关文章:

你感兴趣的文章:

标签云: