PyQt之玩转signal(信号)与slot(槽)二:添加自定义槽
来源:互联网 发布:淘宝招牌图片尺寸 编辑:程序博客网 时间:2024/05/01 17:34
上文中我们实现了一个非常简单的功能:点击按钮关闭应用。不过那种调用connect函数的写法是在QT编程中常用的(用C++语言写QT应用),显得中规中矩,我们这里是PyQt,自然要来一种PyQt的写法,我们先看代码:
import sysfrom PyQt4 import QtGui, QtCoreclass Example(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) button = QtGui.QPushButton('close', self) button.move(100, 60) button.clicked.connect(QtCore.SIGNAL('clicked()')) #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.clicked.connect(QtCore.SIGNAL(‘clicked()’))
我们编译一下,发现有错误,如下图所示:
错误的意思是connect里面的参数一定要是一个callable(调用)或一个signal(信号),而我们这里是str类型。
知道了错误就好办了,我们将参数修改为调用就好了嘛,如下:
button.clicked.connect(self.close)
这里button.clicked是一个signal(信号),这里可以总结出来一个式子:
signal.connect(callable or signal)
前篇文章我们介绍了一个信号可以与一个槽函数或者另一个信号进行连接。参数callable相当于我们的槽函数。
再次编译就不会报错了。现在比较一下这两者的好坏,第一种写法是C++的写法,而这种是Python的写法,两种都可以用,根据自己的习惯来。如果你是从QT程序员转过来的话,那么估计你青睐C++的写法,不过我个人比较喜欢Python的写法,谁叫我是Python程序员呢^_^。
上面的close函数是从QWidget里继承过来的,也就是系统自带的函数。今天我们的重点是添加自定义槽函数。
我们举个什么例子呢?嗯,点击’change color’按钮,让背景颜色改变吧!
先来看代码:
import sysfrom PyQt4 import QtGui, QtCoreclass Example(QtGui.QWidget): def change(self): print 'You pressed the butthon' palette = QtGui.QPalette(self) palette.setColor(self.backgroundRole(), QtGui.QColor(192,253,123)) self.setPalette(palette) 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)app = QtGui.QApplication(sys.argv)ex = Example()ex.show()sys.exit(app.exec_())
嗯,不用多说,也很简单。connect里面的参数是我们自定义的一个方法change,在这个change方法里我们通过QPalette对象改变了背景色。点击按钮后的效果如下图所示:
PyQt视频教程见:http://www.duobei.com/course/6238671512
- PyQt之玩转signal(信号)与slot(槽)二:添加自定义槽
- PyQt之玩转signal(信号)与slot(槽)一:介绍及简单实例
- PyQt之玩转signal(信号)与slot(槽)一:介绍及简单实例
- PyQt学习笔记-开端篇 信号和槽 signal slot
- signal-slot 信号槽技术初探二
- 信号(SIGNAL)与槽(SLOT)
- pyqt自定义信号与槽
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- Qt 初探信号与槽(signal & slot)
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- Qt信号与槽机制(signal & slot)
- QT信号(SIGNAL)与槽(SLOT)
- Qt:QML:QML于C++交互之信号与槽(signal&slot )
- qt信号signal和槽slot机制
- signal-slot 信号槽技术初探一
- linux之sed用法
- js(jquery)绑定点击事件
- MD5加密
- LoadRunner - 调用外部DLL的点点滴滴
- Html5学习第一天
- PyQt之玩转signal(信号)与slot(槽)二:添加自定义槽
- Windows下编译fast rcnn
- FastJson字段解析问题
- 反射判断成员变量是否静态,并获得其静态成员的值
- URI URL URN的区别
- ServletConfig 接口和ServletContext 接口
- iOS可持续化集成: Jenkins + bundler + cocoapods + shenzhen + fastlane + pgyer
- java exception使用的性能影响,用数据说话
- C++空类中的默认函数