PyQt重载预先存在的信号

时间:2014-09-15 04:17:42

标签: python python-2.7 pyqt pyqt4

我想要为预先存在的信号添加新的重载。这是一个非常简单的概念示例:

import sys
from PyQt4 import QtGui, QtCore

class MyComboBox(QtGui.QComboBox):
    currentIndexChanged = QtCore.pyqtSignal(float)
    def __init__(self, *args, **kwargs):
        super(MyComboBox, self).__init__(*args, **kwargs)
        self.currentIndexChanged[int].connect(self._on_current_changed)

    def _on_current_changed(self, index):
        self.currentIndexChanged[float].emit(float(index))

def log(value):
    print 'value:', value

app = QtGui.QApplication(sys.argv)
combo = MyComboBox()
combo.addItems(['foo', 'bar', 'baz'])
combo.currentIndexChanged[float].connect(log)
combo.show()
sys.exit(app.exec_())

当我跑步时,我得到:

    self.currentIndexChanged[int].connect(self._on_current_changed)
KeyError: 'there is no matching overloaded signal'

我的猜测是,将新信号定义为具有相同名称会完全覆盖现有信号,但我不知道如何防止这种情况发生。

1 个答案:

答案 0 :(得分:1)

重载信号与重载方法没有什么不同。如果要访问基类信号,可以通过super

进行
super(MyComboBox, self).currentIndexChanged[int].connect(
        self._on_current_changed)