PyQt编程快速上手
上QQ阅读APP看书,第一时间看更新

1.4.4 多个信号连接一个槽

QPushButton除了有clicked信号,还有pressed信号和released信号。pressed信号是在按钮被“按下”那一刻发射,而released信号则是在按钮被“松开”后发射。“按下”和“松开”其实就构成了一次单击,也就会发射clicked信号。现在我们将pressed信号和released信号用在示例代码1-17中。

示例代码1-17

import sys
from PyQt5.QtWidgets import *
 
class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.btn = QPushButton('Start', self)
        self.btn.pressed.connect(self.change_text)     #注释1开始
        self.btn.released.connect(self.change_text)    #注释1结束
 
    def change_text(self):
        if self.btn.text() == 'Start':
            self.btn.setText('Stop')
        else:
            self.btn.setText('Start')
 
if __name__ == '__main__':
    app = QApplication([])
    window = Window()
    window.show()
    sys.exit(app.exec())

运行结果如图1-27所示。

图1-27 “按下”和“松开”后的按钮文本

代码解释:

#1 将pressed信号和released信号都跟change_text()槽函数连接起来。那么当按钮被“按下”(不“松开”)时,槽函数就会被调用,按钮文本从“Start”变成了“Stop”。当“松开”按钮后,槽函数再次被调用,按钮文本从“Stop”变回了“Start”。