03:pyqt5的信号与槽函数

1.是什么

其实这个机制非常好理解,我们拿红绿灯来做个类比。

当红灯信号发射后,行人就会停下;当绿灯信号发射后,行人就会前进。我们用red和green来表示信号,用stop()和go()函数来表示行人的动作,这两个函数也被称为槽函数。

也就是说,当red信号发射后,stop()槽函数就会被调用;当green信号发射后,go()槽函数会被调用。不过信号和槽只有在连接之后才可以起作用,连接方式如图1-21所示

在下图中

(1)widget就是PyQt中的控件对象。其实就是组件

(2)signal就是控件对象拥有的信号

(3)connect()方法用于连接信号和槽,

(4)slot是槽函数名称。

请添加图片描述

red信号stop()槽函数进行连接

green信号go()槽函数进行连接

只有这样连接后,发射的信号才可以调用相应的槽函数。

总结起来就一句话:连接后,信号发射,槽函数“启动”

traffic_light.red.connect(stop)
traffic_light.green.connect(go)

在connect()方法中传入的是函数名

2.一个信号连接一个槽

1.案例一:start按钮与stop按钮之间转换

实现功能:我们可以在很多窗口上看到“Start”按钮,单击之后文本从“Start”变成了“Stop”

import sys
from PyQt5.QtWidgets import *
class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        btn = QPushButton('Start', self)
        btn.clicked.connect(self.change_text)
    def change_text(self):
        btn = self.sender() 
        if btn.text() == 'Start':
            btn.setText('Stop')
        else:
            btn.setText('Start')
if __name__ == '__main__':
    app = QApplication([])
    window = Window()
    window.show()
    sys.exit(app.exec())

(#1) 实例化一个QPushButton按钮控件之后,我们将按钮的clicked信号与自定义的change_text()槽函数连接起来。

(#2) 在槽函数中,我们首先通过text()方法获取到当前单击按钮的文本,如果是“Start”,就调用setText()方法将按钮的文本修改为“Stop”。而如果文本是“Stop”,就将其修改为“Start”。

因为要在槽函数中使用btn对象,所以应该在类的初始化函数__init__()中将btn设置为成员变量,也就是self.btn。当然我们也可以直接通过sender()方法获取到当前发射信号的控件对象

每个控件都有相应的内置信号,比如QPushButton控件有clicked、pressed、released等内置信号。当然我们也可以给控件或窗口自定义一个信号

2.案例二:信号传值

信号是可以传值的,比如QLineEdit控件有一个textChanged信号,它会在输入框中的文本发生改变时被发射,并且会携带当前的文本。

import sys
from PyQt5.QtWidgets import *
class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.resize(180
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值