我试图通过简化和修改它来理解pyqt5中的图表示例。我的目标是在状态栏标签中显示所选项目,但我正在写入控制台进行测试。
我的问题:输出在派生的QGraphicsScene类中工作正常,但如果我在派生的MainWindow类中定义它(如果我想更新状态栏,我需要这样做)。问题似乎在于信号/插槽机制。我查看了:"TypeError: native Qt signal is not callable" with custom slots,TypeError: native Qt signal is not callable when i try to convert pyqt4 to pyqt5,TypeError: native Qt signal is not callable和PySide/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中的函数时却不会生成错误?我对信号和插槽的误解是什么?