首先声明,这是学习了别人的文章后写的,原网址点击打开链接

简单地说,就是把上一篇中的

self.connect(exit,QtCore.SIGNAL('triggered()'),QtCore.SLOT('close()'))

改写成

exit.triggered.connect(self.close)

其中exit.triggered是一个signal信号,这里self.close就是槽函数了。

我们先详细讲一下信号和槽之间的关系吧。

信号与槽能让任意的QT对象之间进行通信,信号可以被发射出去,槽可以接受信号。每个QT对象都包含预定的信号和槽。

信号与槽连接常用connect函数,connect(Object1,SIGNAL(signal),Object2,SLOT(slot))

我们来看一下connect函数的三个原型吧

connect(QObject, QT_SIGNAL, QObject, QT_SLOT_QT_SIGNAL, Qt.ConnectionType = Qt.AutoConnection) -> object
connect(QObject, QT_SIGNAL, Callable[..., None], Qt.ConnectionType = Qt.AutoConnection) -> object
connect(self, QObject, QT_SIGNAL, QT_SLOT_QT_SIGNAL, Qt.ConnectionType = Qt.AutoConnection) -> object
可以看出来没有改过的语句明显调用的是第二个原型,
我们也可以把它写成第一种和第三种形式,分别为
QtGui.QMainWindow.connect(exit,QtCore.SIGNAL('triggered()'),self,QtCore.SLOT('close()'))
QtGui.QMainWindow.connect(self,exit,QtCore.SIGNAL('triggered()'),QtCore.SLOT('close()'))

上文说的两个对象,就体现在connect函数中的Object1和Object2,signal是Object1对象的信号,注意要用SIGNAL宏包起来。当一个特定事件发生的时候(如点击按钮)或者Object1调用emit函数的时候,signal信号被发射。slot(槽)就是一个可以被调用处理特定信号的函数(或方法),是普通的对象成员函数。
它们存在一些特点:
1.一个信号可以与另一个信号相连
2.表示一个信号可以与多个槽相连
3.表示同一个槽可以响应多个信号
以上特点可以看出信号和槽是宽松地联系在一起的:一个发射信号的对象不用知道也不用注意哪个槽或哪些槽要接收这个信号。对象只负责发送信号,它不知道也不需要知道另一端是谁在接收这个信号。同样的,一个槽也不知道是否有任何信号与自己相连接。
一个简单实例:点击close按钮关闭应用程序
import sys
from PyQt4 import QtGui, QtCoreclass Example(QtGui.QWidget):def __init__(self):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_())

我们现在接着来看看自定义插槽。之前讲到exit.triggered是一个signal信号,这里self.close就是槽函数
给出一个例子,点击’change color’按钮,让背景颜色改变吧!
这里写图片描述
import sys
from PyQt4 import QtGui, QtCoreclass Example(QtGui.QWidget):def change(self):print 'You pressed the butthon'palette = QtGui.QPalette(self) #create a object of class QPalette,  defaultpalette.setColor(self.backgroundRole(), QtGui.QColor(192,253,123)) #给调色板设置背景颜色self.setPalette(palette) #把调色板的属性给self(即QWidget对象)def __init__(self):QtGui.QWidget.__init__(self)button = QtGui.QPushButton('change color', self)button.move(100, 60)self.setWindowTitle('Signal & slot')self.resize(250, 150)button.clicked.connect(self.change) #自定义的change函数app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

详细讲解一下change函数部分吧,
同样地,可以猜测出来palette是QPalette的一个对象,而且是调用的缺省的构造函数。
这里调用的setColor函数原型是setColor(self, QPalette.ColorRole, QColor),(应该是),这一句话就是给调色板添上颜色的。
backgroundRole函数原型是backgroundRole(self) ,返回值类型是 QPalette.ColorRole
setPalette函数的原型是:def setPalette(self, QPalette),可以猜测出来是利用调色板给self设置背景颜色的。
各自函数属于的类是显而易见的,所以上面分析过程中我就没有说了。

change函数也可以这样写。
def change(self):print 'You pressed the butthon' palette = QtGui.QPalette(QtGui.QColor(0,0,0)) #这里调用的是带参数的构造函数。self.setPalette(palette)
以上部分内容转自http://blog.csdn.net/u011943221/article/details/47007315

PyQt4编程之自定义插槽相关推荐

  1. android 自定义dialog 定时关闭,Android编程实现自定义Dialog的大小自动控制方法示例...

    本文实例讲述了Android编程实现自定义Dialog的大小自动控制方法.分享给大家供大家参考,具体如下: Android应用开发中,无论是出于功能还是增加用户体验,弹出对话框(Dialog)进行一些 ...

  2. android 自定义menu背景,Android编程实现自定义系统菜单背景的方法

    本文实例讲述了Android编程实现自定义系统菜单背景的方法.分享给大家供大家参考,具体如下: 不多说,上图,见代码. package lab.sodino.menutest; import andr ...

  3. uni-app开发:(源码级别)uni-badge样式修改(自定义插槽)

    文章目录 uni-app开发:(源码级别)uni-badge样式修改(自定义插槽) 一.效果图需求说明: 二.源码 · 修改前后对比: 2.1. 修改前 2.2. 修改后 三.调用代码: 附件:uni ...

  4. android自定义手势,Android编程实现自定义手势的方法详解

    本文实例讲述了Android编程实现自定义手势的方法.分享给大家供大家参考,具体如下: 之前介绍过如何在Android程序中使用手势,主要是系统默认提供的几个手势,这次介绍一下如何自定义手势,以及如何 ...

  5. android 自定义多tab悬浮控件,Android编程实现自定义Tab选项卡功能示例

    本文实例讲述了Android编程实现自定义Tab选项卡功能.分享给大家供大家参考,具体如下: import android.app.TabActivity; import android.conten ...

  6. android自定义控件颜色渐变,Android编程实现自定义渐变颜色效果详解

    本文实例讲述了Android编程实现自定义渐变颜色效果.分享给大家供大家参考,具体如下: 你是否已经厌恶了纯色的背景呢?那好,Android提供给程序员自定义渐变颜色的接口,让我们的界面炫起来吧. x ...

  7. android日历编程,Android自定义日历Calender代码实现

    产品要做签到功能,签到功能要基于一个日历来进行,所以就根据 要求自定义了一个日历 自定义控件相信做android都知道: (1)首先创建一个类,继承一个容器类或者是一个控件 (2)然后就是你需要设置的 ...

  8. Win32编程 使用自定义的ICON资源

    1.  在使用Win32编程时,如果想更换默认的标题栏图标和任务栏图标,注意点如下: a. 窗口注册类型为WNDCLASS,在更改icon图标时,只要 WNDCLASS wc; wc.hIcon = ...

  9. PyQt4编程之简短地做出多个选择框

    先看效果图 ---------------------------------------------------------------------------------------------- ...

最新文章

  1. python update用法_使用dnspython进行 update
  2. int p 与int p 的不同
  3. Linux netstat命令介绍
  4. Django 学习笔记之七 实现分页
  5. Node 应用篇!推荐 10 个好用的 Node 的开源项目 YYDS
  6. Make Them Equal
  7. Windows下VS2013 C++编译测试faster-rcnn
  8. [学习方法]如何解析源代码
  9. Python问答环节(2)
  10. web.xml文件头出错
  11. 不同版本的mysql_windows下如何让多个个不同版本的mysql共存-百度经验
  12. c语言线性表库函数大全,数据结构(C语言版)-线性表习题详解
  13. 集成学习——LightGBM原理理解
  14. Android数据的四种存储方式
  15. cocos2d-js 开发常用方法
  16. 畅捷通魔方MP70初体验
  17. 华硕台式计算机光盘怎么启动不了,华硕怎么设置光盘启动_华硕怎么设置开机启动光驱...
  18. yum安装软件报错:Invalid configuration value: failovermethod=priority...
  19. 宝塔备份文件到ftp服务器上,宝塔自动备份网站到FTP空间,宝塔备份ftp空间
  20. 【猴博士】概率论与数理统计 笔记总结(完结)

热门文章

  1. 【转】SAP S4HANA Cloud被IDC评为全球SaaS和云ERP系统领导者
  2. java 调用SAP RFC函数错误信息集锦
  3. BI工具选型指标,如何选择好的BI工具
  4. Jedis干什么用的
  5. SAP系统配置常用命令大全
  6. ABAP:下载服务器文件到本机
  7. ABAP Memory/SAP Memory/Shared Buffer/Database
  8. 不懂规矩站错位置,“代币”谄媚“区块链”逼于无奈
  9. mysql concat ws 效率,MySQL concat_ws()方法的用法
  10. mysql tcp ip_通过TCP/IP连接Mysql数据库