了解TypeError:本机Qt信号不可调用

时间:2018-05-12 22:11:53

标签: python pyqt5 qgraphicsscene qt-signals slot

我试图通过简化和修改它来理解pyqt5中的图表示例。我的目标是在状态栏标签中显示所选项目,但我正在写入控制台进行测试。

我的问题:输出在派生的QGraphicsScene类中工作正常,但如果我在派生的MainWindow类中定义它(如果我想更新状态栏,我需要这样做)。问题似乎在于信号/插槽机制。我查看了:"TypeError: native Qt signal is not callable" with custom slotsTypeError: native Qt signal is not callable when i try to convert pyqt4 to pyqt5TypeError: native Qt signal is not callablePySide/PyQt: 'TypeError: native Qt signal is not callable' when trying to use 'currentItemChanged' with QTableWidget,但这些都没有帮助。

完整代码位于https://pastebin.com/Y4HQZ2XQ

更新:此版本删除了命名重叠歧义(https://pastebin.com/RaqDtMvw

它还需要此资源文件:https://pastebin.com/gBfP6Vae

以下相关行:

这正确地将信息写入控制台,但不适合更新状态栏:

# in the derived QGraphicsScene
def onSelectionChanged(self):
    for item in self.selectedItems():
        print(item)

# in the derived QMainWindow
def __init__(self):
    super(MainWindow, self).__init__()

    # This prints correctly, but couldn't be used with a statusbar
    self.scene.selectionChanged.connect(self.scene.onSelectionChanged)

这导致TypeError:本机Qt信号不可调用:

# nothing special in the derived QGraphicsScene

# in the derived QMainWindow
def __init__(self):
    super(MainWindow, self).__init__()

    # This generates the error, even though the syntax is the same
    self.scene.selectionChanged.connect(self.print_item_info)

def print_item_info(self):
    for item in self.scene.selectedItems():
        print(item)

为什么相同的语法在连接到派生的QMainWindow中的函数时会生成错误,但是当它连接到派生的QGraphicsScene中的函数时却不会生成错误?我对信号和插槽的误解是什么?

0 个答案:

没有答案