2012-09-23 1 views
1

gui에서 영구 위젯으로 QMenu를 사용하고 싶습니다. (나는 외모와 레이아웃, 그리고 그 위에 마우스를 올리 자마자 필요한 메뉴가 나타나고, 클릭 할 필요가 없다. 목에 통증이있어 커스텀 위젯으로 에뮬레이트하려고한다.) 부모 위젯의 레이아웃에 추가하려고했지만 처음 사용 된 후에 사라집니다. 내가 어떻게 거기에 보관하려고 할까?Qt/PyQt : 영구 위젯으로 QMenu를 사용하려면 어떻게해야합니까?

답변

1

QMenu에서 자동 숨기기를 사용할 수없는 옵션을 찾을 수 없으므로 가장 간단한 방법은 hideEvent을 재정의하는 하위 클래스가됩니다. hide() 완료 직전에 hideEvent이 (가) 해고됩니다. 즉,/차단 hide()을 무시하지만, 당신이 그것을 다시 표시 할 수 없습니다 의미

class PermanentMenu(QtGui.QMenu): 
    def hideEvent(self, event): 
     self.show() 

그냥 PermanentMenu에서 최상위 메뉴를 만들고 그것을 잘해야합니다. 그것을 사용

간단한 예 :

import sys 
from PyQt4 import QtGui 

class PermanentMenu(QtGui.QMenu): 
    def hideEvent(self, event): 
     self.show() 


class Window(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(Window, self).__init__(parent) 

     self.menu = PermanentMenu() 

     self.menu.addAction('one') 
     self.menu.addAction('two') 

     self.submenu = self.menu.addMenu('submenu') 
     self.submenu.addAction('sub one') 
     self.submenu.addAction('sub two') 

     self.submenu2 = self.menu.addMenu('submenu 2') 
     self.submenu2.addAction('sub 2 one') 
     self.submenu2.addAction('sub 2 two') 

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

완벽한. 나는 그것이 높은 CPU 사용 중에 깜박 거리고 다시 돌아올까 걱정하지만, 지금까지는 그것을 볼 수 없다. – Jeff

+0

@ 제프 : 네, 가능합니다. QToolBar와 같은 것을 사용하지 않을 이유가 있습니까? – Avaris

+0

대부분 마우스를 움직일 때 메뉴가 자동으로 나타나기를 원하기 때문입니다. QToolBar로 그렇게 할 수 있습니까? – Jeff

관련 문제