2012-12-04 9 views
5

Ho un'applicazione in cui creo voci di menu e desidero impostare la visibilità di un particolare sottomenu.Come nascondere un sottomenu in QMenu

Ho provato a utilizzare setVisibility(False), ma questo non ha funzionato. setVisibility() funziona per le voci di menu, ma non per i sottomenu in QMenus.

Dai un'occhiata alla il frammento di codice qui sotto:

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

Nell'esempio di cui sopra, posso nascondere la voce di menu denominata "One", ma non il sottomenu chiamato "sottomenu 2"

Qualcuno può darmi un'idea ...

risposta

14

L'avete quasi avuto;

Invece di questo:

self.submenu2.setVisible(False) 

Si desidera che questo:

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

Amico thx per la risposta molto veloce ... Ha funzionato perfettamente ... – Rao

+0

@PBLNarasimhaRao non ne parlano – will

+2

Funziona perfettamente anche in C++ QT: MySubMenu-> menuAction() -> setVisible (true); Top google hit dice che non si può fare, quindi ho pensato di condividerlo qui. Non è necessario eliminare i sottomenu e riaggiungerli, il che può causare un arresto anomalo su osx. – Marcus10110