Python 使用自定义类型发出现有信号

Python 使用自定义类型发出现有信号,python,pyside,Python,Pyside,我想“增加”一个现有信号(currentIndexChanged,在上面的示例中),使其能够返回另一种类型: from PySide import QtCore, QtGui class MyClass(object): pass class MyClassComboBox(QtGui.QComboBox): @QtCore.Signal(int, result=MyClass) def currentIndexChanged(self, *args):

我想“增加”一个现有信号(
currentIndexChanged
,在上面的示例中),使其能够返回另一种类型:

from PySide import QtCore, QtGui

class MyClass(object):
    pass

class MyClassComboBox(QtGui.QComboBox):

    @QtCore.Signal(int, result=MyClass)
    def currentIndexChanged(self, *args):

        my_class_instance = self._id_to_my_class(args[0])

        return my_class_instance


class MyClassWidget(QtGui.QWidget):

    def __init__(self, *args, **kwargs):
        super(MyClassWidget, self).__init__(*args, **kwargs)

        cb = MyClassComboBox(self)

        cb.currentIndexChanged[MyClass].connect(self.do_it)

    def do_it(self, *args):

        assert isinstance(args[0], MyClass)

        print args
正如您所猜测的,由于
@QtCore.Signal(int,result=MyClass)
,此代码无法工作。正如您所猜测的,这个想法是注册一个现有的信号(
currentinexchanged
)来返回一个给定的自定义类型(
MyClass


你知道我该怎么做吗?

搞乱现有的
Qt
信号听起来不是个好主意。如果在发出信号时需要向插槽传递附加或修改的参数,可以使用lambda函数来实现

虽然还不完全清楚你想从你的例子中得到什么,但你可能想要这样的东西

cb.currentIndexChanged.connect(lambda i: self.do_it(MyClass(i)))

当索引更改时,您将发出自己的自定义信号并连接到该信号。