pyqt5 信号槽 判断信号发出者(sender)

1
qt的信号槽除了一对一也可以一对多,比如多个按键的click信号链接一个槽函数。这个收就需要判断是哪一个按键发出的信号

2
sender()在QT里的原型是QObject::sender(),也就是对象,实例化的对象可以发送信号,返回发送信号的对象的指针,返回类型为QObject *。

3
pyqt里的话用起来很方便,直接self.sender()就可以直接得到了
if self.sender()== 对象:判断就行

class Table(QWidget):#表格
    def __init__(self):
        super(Table, self).__init__()
        self.initUI()
        
    def initUI(self):
        self.setWindowTitle("test")
        self.resize(350,200)
        hor2=QHBoxLayout()
        self.TableWidget=QTableWidget(1,3)
        #表格头的显示与隐藏
        self.TableWidget.verticalHeader().setVisible(False)
        self.TableWidget.horizontalHeader().setVisible(False)
        
        #在单元格内放置复选框
        self.C=['comBox'+str(n) for n in range(3)]
        for n in range(3):
            self.C[n]=QComboBox()
            self.C[n].addItems(['0','1','2'])
            self.TableWidget.setCellWidget(0,n,self.C[n])
            self.C[n].setCurrentIndex(-1)
            self.C[n].activated[str].connect(self._slot)

        hor2.addWidget(self.TableWidget)
        self.setLayout(hor2)
        
    def _slot(self,value):
        if self.sender() == self.C[0]:
            print('第一个复选框')
        if self.sender() == self.C[1]:
            print('第二个复选框')
        if self.sender() == self.C[2]:
            print('第三个复选框')
        
        print('value:',value)



if __name__ == '__main__':
    app=QApplication(sys.argv)

    demo = Table()
    demo.show()
    sys.exit(app.exec_())

补充一下:

self.btn.pressed.connect(lambda: self.set_btn_val(self.sender()))
def set_btn_val(self):
    if  self.sender()==self.btn:
    	pass
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PyQt5信号机制可以支持多种参数的传递。在使用信号时,我们可以在信号的定义中添加参数,以便在信号触发时传递参数给函数。 在PyQt5中,信号的定义可以使用QtCore模块的pyqtSignal()函数和QtWidgets模块的QObject类的connect()函数进行。 首先,在定义信号时,可以在pyqtSignal()函数中添加参数类型,来指定信号需要传递的参数的类型。例如,可以使用如下代码定义一个带有两个参数的信号: ```python from PyQt5.QtCore import pyqtSignal, QObject class MySignal(QObject): my_signal = pyqtSignal(int, str) ``` 在这个例子中,我们定义了一个名为my_signal的信号,它需要传递一个整型参数和一个字符串参数。 接下来,在连接信号时,可以使用connect()函数来指定连接的信号的参数。例如,可以使用如下代码将上面定义的信号连接到一个函数: ```python def my_slot(num, text): print("Received:", num, text) signal_obj = MySignal() signal_obj.my_signal.connect(my_slot) ``` 在这个例子中,我们定义了一个函数my_slot,它接受一个整型参数和一个字符串参数。然后,我们创建了一个信号对象signal_obj,并将信号对象的my_signal信号连接到my_slot函数。 当信号触发时,参数会被传递给函数进行处理。例如,可以使用如下代码触发信号: ```python signal_obj.my_signal.emit(123, "Hello") ``` 在这个例子中,我们通过调用my_signal的emit()方法触发了信号,同时传递了一个整数123和字符串"Hello"作为参数。 总而言之,PyQt5信号机制可以支持多种参数的传递。我们可以在信号的定义中添加参数类型,然后在连接信号时指定参数类型,以实现多种参数的传递和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值