如何在 QMenu 中隐藏子菜单

Posted

技术标签:

【中文标题】如何在 QMenu 中隐藏子菜单【英文标题】:How do I hide a sub-menu in QMenu 【发布时间】:2012-11-22 02:13:21 【问题描述】:

我有一个生成菜单项的应用程序,我想设置特定子菜单的可见性。

我尝试使用setVisibility(False),但这不起作用。 setVisibility() 适用于菜单项,但不适用于 QMenus 中的子菜单。

看看下面的代码sn-p:

import sys
from PyQt4 import QtGui

class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.menu = QtGui.QMenu()
        self.actio1 = QtGui.QAction('One', self)
        self.actio2 = QtGui.QAction('Two', self)
        self.menu.addAction(self.actio1)
        self.menu.addAction(self.actio2)
        self.actio1.setVisible(False)
        self.submenu = QtGui.QMenu('submenu', self)
        self.submenu.addAction('sub one')
        self.submenu.addAction('sub two')
        self.menu.addMenu(self.submenu)        
        self.submenu2 = QtGui.QMenu('submenu 2', self)
        self.submenu2.addAction('sub 2 one')
        self.submenu2.addAction('sub 2 two')
        self.menu.addMenu(self.submenu2)        
        self.submenu2.setVisible(False)
        layout = QtGui.QHBoxLayout()
        layout.addWidget(self.menu)
        self.setLayout(layout)

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

在上面的例子中,我可以隐藏名为“One”的菜单项,但不能隐藏名为“submenu 2”的子菜单

谁能给我一个想法...

【问题讨论】:

【参考方案1】:

你几乎拥有它;

而不是这个:

self.submenu2.setVisible(False)

你想要这个:

self.submenu2.menuAction().setVisible(False)

【讨论】:

@PBLNarasimhaRao 别提了 这在 C++ QT 中也很有效:MySubMenu->menuAction()->setVisible(true);谷歌热门热门说它无法完成,所以我想我会在这里分享这个。无需删除子菜单并重新添加它们,这可能会导致 osx 崩溃。 @Marcus10110 - 是的,在 PyQt/PySide 和 Qt 之间交换 .s 和 ->s 几乎无处不在。 我在 OS X 上,我的菜单会自动移动到系统的菜单栏。我试图隐藏子菜单或将其标记为禁用;我尝试了MySubMenu->menuAction()->setEnabled(false);MySubMenu->menuAction()->setVisible(false);MySubMenu->menuAction()->hide(); 甚至MySubMenu->menuAction()->clear();,但这些都没有对子菜单的外观造成任何改变。唯一有效的是MyMenu->removeAction(MySubMenu->menuAction());。希望这可以节省其他人一些时间和挫败感:)

以上是关于如何在 QMenu 中隐藏子菜单的主要内容,如果未能解决你的问题,请参考以下文章

子 QMenu 中的 QPushButton,悬停时更改背景

无法隐藏 QMenu 对象 QMenu::setVisible()?

如何在 Qmenu 中添加关闭按钮?

如何自动隐藏 GWT MenuBar 子菜单?

在导航引导解释中隐藏子菜单

如何格式化 Qmenu 或 Toolboxes 中的特定项目?是不是可以定义伪状态或子控件?