PySide6自定义信号触发AttributeError问题求助
问题解决:AttributeError: 'ToolBar' object has no attribute 'connection_established'
错误原因
Qt的Signal是QObject类专属特性,自定义类必须继承QObject才能使用信号机制。你的ToolBar是普通Python类,未继承QObject,导致类中定义的connection_established信号无法被Qt框架正确识别,实例访问该属性时触发AttributeError。
解决方案
- 让
ToolBar类继承PySide6.QtCore.QObject - 在
ToolBar的__init__方法中调用父类初始化方法super().__init__(parent)
修正后的完整代码
from PySide6.QtWidgets import (QMainWindow, QApplication, QToolBar) from PySide6.QtGui import QAction, QIcon from PySide6.QtCore import QSize, Signal, QObject from PySide6 import QtCore QtCore.QDir.addSearchPath('icon', 'icon/') class ToolBar(QObject): connection_established = Signal(bool) def __init__(self, parent): super().__init__(parent) self.parent = parent toolbar = QToolBar("toolbar") toolbar.setIconSize(QSize(16, 16)) connect_action = QAction(QIcon('icon:icons8_connect_50.png'), "&Connect", self.parent) connect_action.triggered.connect(self.connect_button) toolbar.addAction(connect_action) toolbar.addSeparator() self.parent.addToolBar(toolbar) def connect_button(self): self.connection_established.emit(True) class Tele(QMainWindow): def __init__(self): super(Tele, self).__init__() self.toolbar_m = ToolBar(self) self.toolbar_m.connection_established.connect(self.connection_status) def connection_status(self, connected): if connected: print("Connected") else: print("Failed to connect") if __name__ == "__main__": app = QApplication([]) tele = Tele() tele.show() app.exec()
内容的提问来源于stack exchange,提问作者Raven
相关产品推荐
相关产品推荐

