PyQt之玩转signal(信号)与slot(槽)二:添加自定义槽

上文中我们实现了一个非常简单的功能:点击按钮关闭应用。不过那种调用connect函数的写法是在QT编程中常用的(用C++语言写QT应用),显得中规中矩,我们这里是PyQt,自然要来一种PyQt的写法,我们先看代码:

import sys
from PyQt4 import QtGui, QtCore


class 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()’))
我们编译一下,发现有错误,如下图所示:
PyQt之玩转signal(信号)与slot(槽)二:添加自定义槽_第1张图片
错误的意思是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’按钮,让背景颜色改变吧!
PyQt之玩转signal(信号)与slot(槽)二:添加自定义槽_第2张图片
先来看代码:

import sys
from PyQt4 import QtGui, QtCore


class 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之玩转signal(信号)与slot(槽)二:添加自定义槽_第3张图片

PyQt视频教程见:http://www.duobei.com/course/6238671512

你可能感兴趣的:(PyQt项目实战)