2012-12-04 16 views
5

Mam aplikację, w której generuję elementy menu i chcę ustawić widoczność konkretnego podmenu.Jak ukryć podmenu w QMenu

Próbowałem używać setVisibility(False), ale to nie zadziałało. setVisibility() działa dla pozycji menu, ale nie dla podmenu w QMenus.

Zapraszamy do obejrzenia fragmentu kodu poniżej:

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_()) 

w powyższym przykładzie, mogę ukryć element menu o nazwie „One”, ale nie podmenu o nazwie „submenu 2”

Czy ktoś może mi dać pomysł ...

Odpowiedz

14

Prawie już go miałeś;

Zamiast tego:

self.submenu2.setVisible(False) 

Chcesz to:

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

Dude thx za bardzo szybką odpowiedź ... To działało idealnie ... – Rao

+0

@PBLNarasimhaRao nie wspominając już – will

+2

Działa to również świetnie w C++ QT: MySubMenu-> menuAction() -> setVisible (true); Najlepsze trafienie w Google twierdzi, że nie można tego zrobić, więc pomyślałem, że podzielę się tym tutaj. Nie trzeba usuwać podmenu i ponownie je dodawać, co może spowodować awarię osx. – Marcus10110