PyQt5 随笔:信号与槽的两种使用方法:@pyqtSlot() 和 connect()

PyQt5 随笔:信号与槽的两种连接方法:@pyqtSlot() 和 connect()

1. @pyqtSlot()

@pyqtSlot()有两种使用情况。如下面两个例子。

例子1:一个信号时,如pushButtonclicked,即按钮的点击信号

# 需要引入 pyqtSlot 库函数
from PyQt5.QtCore import pyqtSlot
# 信号与槽函数
@pyqtSlot()
def on_pushButton_clicked(self):
	print('点击了按钮')

代码说明:

@pyqtSlot()是这种方式的修饰关键词,他表明下面函数是信号槽函数

由于没有connect来初始化,在初始化函数中,没有说明是那个控件信号的关键词。

所以,在@pyqtSlot()方式里,函数名称有特殊要求

on_(控件对象名)_信号名(self,内置参数)

内置参数可以缺省

例子2:一个控件多个信号时,如名为self.lineEdit_2QlineEdit控件的returnPressedtextChanged信号

@pyqtSlot()
def on_lineEdit_2_returnPressed(self):
	print('触发了信号 returnPressed')

def on_lineEdit_2_textChanged(self):
	print('触发了信号 textChanged')

代码说明:一个控件同时要写多个信号与槽函数时,只需要写一遍@pyqtSlot()关键词,中间可以有其他函数隔开。

注意是一个控件只写一遍@pyqtSlot()不是所有控件信号只写一次@pyqtSlot(),有多少控件的信号还是要写。

如果多个控件信号只写一次@pyqtSlot()有时会发生非常诡异的事情😄

:完整的例子代码是在一个类中,所以有关键字self


2. connect()

同样,例子1:pushButtonclicked,即按钮的点击信号

# 在初始化函数中信号连接
self.pushButton.clicked.connect(self.A)
# 槽函数
def A(self):
    print('点击了按钮')

代码说明:

由于信号的连接和槽函数是分开的,所以槽函数名称没有特殊要求。而信号连接语句有特殊要求

(控件名称).(信号名称).connect(槽函数名称)

有参数时,槽函数名称部分写成lambda 参数名:函数名(参数名)

注意,没有参数时槽函数不用写双括号()

一个控件多个信号时写法也一样

3.对比

@pyqtSlot()优点是方式书写比较简洁。缺点是但函数名称不能自由定义,在想自定义参数时没有详细说明。

connect()方式优点是理解和学习起来比较简单,而且函数名称可以自由定义。缺点是但如果信号比较多时,书写就比较混乱。




PyQt5中的按钮可以使用QPushButton类创建。您可以使用QPushButton的clicked信号连接到一个,该将在按下按钮时被调用。 以下是一个简单的示例,演示如何在PyQt5中创建按钮组以及如何连接按钮的clicked信号: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout class MyWidget(QWidget): def __init__(self): super().__init__() # 创建三个按钮 self.button1 = QPushButton("Button 1") self.button2 = QPushButton("Button 2") self.button3 = QPushButton("Button 3") # 将按钮添加到垂直布局中 layout = QVBoxLayout() layout.addWidget(self.button1) layout.addWidget(self.button2) layout.addWidget(self.button3) self.setLayout(layout) # 连接按钮的clicked信号 self.button1.clicked.connect(self.buttonClicked) self.button2.clicked.connect(self.buttonClicked) self.button3.clicked.connect(self.buttonClicked) def buttonClicked(self): # 获取发送信号的按钮对象 sender = self.sender() # 根据按钮对象进行相应处理 if sender == self.button1: print("Button 1 clicked") elif sender == self.button2: print("Button 2 clicked") elif sender == self.button3: print("Button 3 clicked") if __name__ == '__main__': app = QApplication(sys.argv) widget = MyWidget() widget.show() sys.exit(app.exec_()) ``` 在这个示例中,我们创建了三个QPushButton对象,并将它们添加到一个QVBoxLayout布局中。然后,我们将每个按钮的clicked信号连接到一个名为buttonClicked的。在中,我们使用sender()方法获取发送信号的按钮对象,并根据该对象进行相应处理。 当您运行此示例时,单击任何一个按钮都会在控制台中输出相应的消息。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值