如何在QMenu中隐藏子菜单

Rao*_*Rao 6 python hide pyqt4 submenu

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

我试过用setVisibility(False),但这没用. setVisibility()适用于菜单项,但不适用于QMenus中的子菜单.

看看下面的代码片段:

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_())
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以给我一个想法......

wil*_*ill 15

你几乎拥有它;

而不是这个:

self.submenu2.setVisible(False)
Run Code Online (Sandbox Code Playgroud)

你要这个:

self.submenu2.menuAction().setVisible(False)
Run Code Online (Sandbox Code Playgroud)

  • 这在C++ QT中也很有效:MySubMenu-> menuAction() - > setVisible(true); 顶级谷歌热门说它无法完成,所以我想我会在这里分享.无需删除子菜单并重新添加它们,这可能会导致osx崩溃. (2认同)
  • @ Marcus10110 - 是的,在PyQt/PySide和Qt*之间交换`.`s和` - >几乎*无处不在. (2认同)