解决IndexError: Signature “s8(int)“ not found for signal: “s8“. Available candidates: “s8()“, “s8()“

文章讲述了在使用PySide6进行GUI界面开发时,遇到Demo1_18.py代码中的信号连接错误,主要原因是信号重载定义的差异。作者给出了在PySide6中正确创建和连接重载型信号的示例,以及如何避免类似问题。
摘要由CSDN通过智能技术生成

QT for PYthon PySide6 GUI界面开发
Demo1_18.py 代码报错
该书中 Demo1_18.py代码,无法正常运行,运行后出现如下提示:
gpy\launcher’ ‘43854’ ‘–’ ‘d:\工具\教程\QTforPythonPyside6GUI界面开发详解与实例实例源代码\Demo1_18.py’
Traceback (most recent call last):
File “d:\工具\教程\QTforPythonPyside6GUI界面开发详解与实例实例源代码\Demo1_18.py”, line 79, in
signalTest = signalDefinition()
File “d:\工具\教程\QTforPythonPyside6GUI界面开发详解与实例实例源代码\Demo1_18.py”, line 24, in init
self.s8[int].connect(self.slot8_1)
IndexError: Signature “s8(int)” not found for signal: “s8”. Available candidates: “s8()”, “s8()”
PS D:\工具\教程\QTforPythonPyside6GUI界面开发详解与实例实例源代码>
原因
估计是作者直接把pyqt5中代码改了一下就拿来用了,因为上述代码在pyqt5中是适用的,不过在PySide6中对信号重载的定义不同,
解决方式:
s8 = Signal((int,),(str,)) #创建重载型信号,相当于创建了两个信号
s9 = Signal((int,str,),(str,),(list,)) #创建重载型信号,相当于创建了3个信号
s10 = Signal((),(bool,)) #创建重载型信号,一个不带参数,另一个带布尔型参数

附:总结PySide6自定义信号要点

1
from PySide6.QtCore import QObject,Signal
2 创建信号
s1 = Signal(int)
s8 = Signal((int,),(str,)) #创建重载型信号,相当于创建了两个信号
s9 = Signal((int,str,),(str,),(list,)) #创建重载型信号,相当于创建了3个信号
s10 = Signal((),(bool,)) #创建重载型信号,一个不带参数,另一个带布尔型参数
3 init 连接槽与信号
self.S1.connect(self.slot1)
self.s8[int].connect(self.slot8_1)
#self.s8.connect(self.slot8_1) #overload型信号的第1个信号可以不指定类型
self.s8[str].connect(self.slot8_2)
self.s9[int,str].connect(self.slot9_1)
#self.s9.connect(self.slot9_1) #overload 型信号的第1个信号可以不指定类型
self.s9[str].connect(self.slot9_2)
self.s9[list].connect(self.slot9_3)
self.s10.connect(self.slot10_1)
self.s10[bool].connect(self.slot10_2)

4 定义槽函数
def slot1(self,value):
print(“s1 emit int”,value)
def slot8_1(self,value):
print(“s8 emit int:”,value)
def slot8_2(self,string):
print(“s8 emit string:”,string)
def slot9_1(self,value,string):
print(“s9 emit int and string:” ,value,string)
def slot9_2(self,string):
print(“s9 emit string”,string)
def slot9_3(self,list_value):
print(“s9 emit list:”,list_value)
def slot10_1(self):
print(“s10 emit”)
def slot10_2(self,value):
print(“s10 emit bool:”,value)

5 init 或 其它 发射信号并传递参数
self.s1.emit(13)
self.s8.emit(200) #
#overload 型信号的第1个信号可以不指定类型
self.s8[str].emit(‘Noise DoWell Tech.’)
self.s9[int,str].emit(300,‘Noise DoWell Tech.’)
#self.s9.emit(300,“Noise DoWell Tech.”) #overload型号的第1个信号可以不指定类型
self.s9[str].emit(‘s9’)
self.s9[list].emit([“s9”,“overload”])

self.s10.emit()
self.s10[bool].emit(True)

附源码

#Demo1_18.py

#自定义信号练习

from PySide6.QtCore import QObject,Signal
#from PyQt5.QtCore import *

class singalDefinition(QObject):
    s1 = Signal()       #创建无参数信号
    s2 = Signal(int)    #创建带整数的信号
    s3 = Signal(float)  #创建带浮点数的信号
    s4 = Signal(str)    #创建带符串的信号
    s5 = Signal(int,float,str)  #创建带整数,浮点和字符串的信号
    s6 = Signal(list)   #创建带列表的信号
    s7 = Signal(dict)   #创建带字典的信号
    s8 = Signal((int,),(str,))    #创建重载型信号,相当于创建了两个信号
    s9 = Signal((int,str,),(str,),(list,)) #创建重载型信号,相当于创建了3个信号
    s10 = Signal((),(bool,))      #创建重载型信号,一个不带参数,另一个带布尔型参数

    def slot1(self):
        print("s1 emit")
    def slot2(self,value):
        print("s2 emit int",value)
    def slot3(self,value):
        print("s3 emit float",value)
    def slot4(self,value):
        print("s4 emit string",value)
    def slot5(self,value1,value2,string):
        print("s5 emit many vlaues",value1,value2,string)
    def slot6(self,list_value):
        print("s6 emit list:",list_value)
    def slot7(self,dict_value):
        print("s7 emit dict:",dict_value)
    def slot8_1(self,value):
        print("s8 emit int:",value)
    def slot8_2(self,string):
        print("s8 emit string:",string)
    def slot9_1(self,value,string):
        print("s9 emit int and string:" ,value,string)
    def slot9_2(self,string):
        print("s9 emit string",string)
    def slot9_3(self,list_value):
        print("s9 emit list:",list_value)
    def slot10_1(self):
        print("s10 emit")
    def slot10_2(self,value):
        print("s10 emit bool:",value)
        
    def __init__(self, parent = None  )  :
        super().__init__(parent)
        self.s1.connect(self.slot1)     #信号与槽的连接
        self.s2.connect(self.slot2)
        self.s3.connect(self.slot3)
        self.s4.connect(self.slot4)
        self.s5.connect(self.slot5)
        self.s6.connect(self.slot6)
        self.s7.connect(self.slot7)
        self.s8[int].connect(self.slot8_1)
        #self.s8[int].connect(self.slot8_1)
        # #self.s8.connect(self.slot8_1) #overload型信号的第1个信号可以不指定类型
        self.s8[str].connect(self.slot8_2)
        self.s9[int,str].connect(self.slot9_1)
        # #self.s9.connect(self.slot9_1) #overload 型信号的第1个信号可以不指定类型
        self.s9[str].connect(self.slot9_2)
        self.s9[list].connect(self.slot9_3)
        self.s10.connect(self.slot10_1)
        self.s10[bool].connect(self.slot10_2)


        self.s1.emit()              #emit()函数是一个方法,表示发射信号并传递参数
        self.s2.emit(10)
        self.s3.emit(11.11)
        self.s4.emit('北京诺思多维科技有限公司')
        self.s5.emit(100,23.5,'北京诺思多维科技有限公司')
        self.s6.emit([1,8,'hello'])
        self.s7.emit({1:'Nosie',2:'DoWell'})
        self.s8.emit(200)      #
        #self.s8[int].emit(200)
        #self.s8.emit(200)           #overload 型信号的第1个信号可以不指定类型
        self.s8[str].emit('Noise DoWell Tech.')
        self.s9[int,str].emit(300,'Noise DoWell Tech.')
        # #self.s9.emit(300,"Noise DoWell Tech.")      #overload型号的第1个信号可以不指定类型
        self.s9[str].emit('s9')
        self.s9[list].emit(["s9","overload"])

        self.s10.emit()
        self.s10[bool].emit(True)



if __name__ == '__main__':
    signalTest = singalDefinition()
                                                                

深入

关于重载型信号,这个例子还没有更深入的解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值