You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt添加QToolBar时窗口不显示 报QObject::disconnect无对应slot错误

问题根因

报错和窗口无法显示的核心原因是组件类的继承关系完全错误:

  • 自定义的MenuBar、ToolBar类都错误使用了多继承,同时继承了QMainWindow和对应组件类(QMenuBar/QToolBar)。QMainWindow是顶层主窗口容器,自带菜单栏、工具栏、状态栏的专属管理逻辑,和普通子组件类的元对象逻辑冲突,直接导致Qt内部的信号槽连接失败,也就是控制台输出的「找不到对应私有槽」报错。
  • 伴随的逻辑错误:两个组件类内部都错误调用了仅QMainWindow才有的方法——MenuBar里调用self.menuBar()、ToolBar里调用self.addToolBar(),相当于在子组件内部又执行了一遍主窗口添加栏位的逻辑,完全不符合Qt的对象层级设计。
修复步骤

只需要修正两个自定义组件类的继承关系和内部逻辑即可,main.py和window.py不需要改动。

  1. 修正menu.py
    • 移除对QMainWindow的继承,MenuBar仅需继承QMenuBar
    • 移除冗余的menubar = self.menuBar()调用,直接给当前菜单栏实例本身添加菜单项
      修正后代码:
from PyQt5.QtWidgets import QMenuBar

class MenuBar(QMenuBar):
    def __init__(self):
        super().__init__()
        self.fileMenu = "&File"
        self.editMenu = "&Edit"
        self.helpMenu = "&Help"
        self.initUI()

    def initUI(self):
        self.addMenu(self.fileMenu)
        self.addMenu(self.editMenu)
        self.addMenu(self.helpMenu)
  1. 修正ToolBar.py
    • 移除对QMainWindow的继承,ToolBar仅需继承QToolBar
    • 移除冗余的toolBar = self.addToolBar("ToolBar")调用,self本身就是工具栏实例,直接设置属性、添加动作即可
      注:原代码里工具栏按钮文本和菜单完全重复,这里顺手调整为符合工具栏功能的文本,可根据需求自行修改
      修正后代码:
from PyQt5.QtWidgets import QToolBar, QAction


class ToolBar(QToolBar):
    def __init__(self):
        super().__init__()
        self._createActions()
        self.initUI()
    

    def initUI(self):
        self.setMovable(False)
        self.addAction(self.compileAction)
        self.addAction(self.settingsAction)
        self.addAction(self.quitAction)

    def _createActions(self):
        self.compileAction = QAction(self)
        self.compileAction.setText("&Compile")

        self.settingsAction = QAction(self)
        self.settingsAction.setText("&Settings")

        self.quitAction = QAction(self)
        self.quitAction.setText("&Quit")

修改完成后重新运行main.py,窗口即可正常展示,菜单栏、工具栏都会正常加载,不会再出现信号槽相关报错。

内容的提问来源于stack exchange,提问作者mnekkach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:27:13