发出自定义类型的现有信号

时间:2017-07-13 13:14:06

标签: 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):

        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)而无效。正如您猜测的那样,我们的想法是注册一个现有信号(currentIndexChanged)以返回给定的自定义类型(MyClass)。

我对如何做到这一点有任何想法?

1 个答案:

答案 0 :(得分:0)

与现有的Qt信号混淆并不是一个好主意。如果在发出信号时需要将附加或修改的参数传递给插槽,则可以使用lambda函数执行此操作。

虽然从你的例子中想要实现的目标并不完全清楚,但你可能想要这样的东西

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