2012-12-04 95 views
5

我有一個生成菜單項的應用程序,我想設置特定子菜單的可見性。如何在QMenu中隱藏子菜單

我試過使用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_()) 

在上面的例子中,我可以隱藏命名爲「一」的菜單項,而不是子菜單名爲「子菜單2」

任何人都可以給我一個想法...

回答

14

你幾乎沒有它;

取而代之的是:

self.submenu2.setVisible(False) 

你想這樣的:

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

了非常快速回復多德THX ...它的工作完美... – Rao

+0

@PBLNarasimhaRao不要客氣 – will

+2

這也適用於C++ QT:MySubMenu-> menuAction() - > setVisible(true); 谷歌熱門熱門說不能完成,所以我想我會在這裏分享。無需刪除子菜單並重新添加它們,這可能會導致在OSX上發生崩潰。 – Marcus10110