2012-12-04 3 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

야 들으 ... 그것은 – Rao

+0

@PBLNarasimhaRao이 그것을 – will

+2

을 언급하지 않습니다 ... 완벽하게 작동 이것은 C++ QT에서도 훌륭하게 작동합니다 : MySubMenu-> menuAction() -> setVisible (true); 탑 구글 히트 (widget)는 할 수 없다고 말하자, 나는 이것을 여기서 공유 할 것이라고 생각했다. 하위 메뉴를 삭제하고 다시 추가 할 필요가 없으므로 osx에서 충돌이 발생할 수 있습니다. – Marcus10110

관련 문제