我想"增加"现有信号(上例中为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
)。
我对如何做到这一点有任何想法?
答案 0 :(得分:0)
与现有的Qt
信号混淆并不是一个好主意。如果在发出信号时需要将附加或修改的参数传递给插槽,则可以使用lambda函数执行此操作。
虽然从你的例子中想要实现的目标并不完全清楚,但你可能想要这样的东西
cb.currentIndexChanged.connect(lambda i: self.do_it(MyClass(i)))