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

QMainWindow状态栏无法正常显示消息:QMenu hovered信号连接异常求助

解决QMenu hovered信号连接状态栏显示失效的问题

问题出在你连接QMenu的hovered信号时,未处理参数为None的情况:当鼠标悬停在菜单栏上的"menu"按钮(未展开菜单)时,QMenu的hovered信号会触发,但此时传递的参数是None,调用a.text()会抛出AttributeError,导致整个信号槽连接失效,后续悬停菜单项时也无法正常触发。

修复方案

方案一:在lambda中添加参数校验

直接修改信号连接的lambda表达式,判断参数是否有效后再执行操作:

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.file_menu = QMenu("menu")
        # 添加参数非空判断
        self.file_menu.hovered.connect(lambda a: self.statusBar().showMessage(a.text()) if a else None)
        self.open_action = QAction("open")
        self.file_menu.addAction(self.open_action)
        self.menuBar().addMenu(self.file_menu)

方案二:为单个QAction绑定hovered信号

QAction自身也有hovered信号(无参数),可以为每个菜单项单独连接槽函数,直接绑定对应文本:

from functools import partial

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.file_menu = QMenu("menu")
        self.open_action = QAction("open")
        # 使用partial绑定消息文本
        self.open_action.hovered.connect(partial(self.statusBar().showMessage, "open"))
        self.file_menu.addAction(self.open_action)
        self.menuBar().addMenu(self.file_menu)

或者自定义槽函数处理:

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.file_menu = QMenu("menu")
        self.open_action = QAction("open")
        self.open_action.hovered.connect(lambda: self._show_status_message(self.open_action.text()))
        self.file_menu.addAction(self.open_action)
        self.menuBar().addMenu(self.file_menu)
    
    def _show_status_message(self, text):
        self.statusBar().showMessage(text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:32:33