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)))
当索引更改时,您将发出自己的自定义信号并连接到该信号。