2014-06-22 1 views
1

QLabel 객체에 QLabel 객체를 추가하려고하는데 QLabel.addAction() 메서드를 사용하지만 동작하지 않습니다. 작동하지 않거나 잘못된 일을하고 있습니까?QLabel에서 QAction을 사용하고 QStackedWidget을 사용하여 아코디언 만들기

QStackedWidget을 사용하여 아코디언을 만들려고합니다. 이를 위해

enter image description here

나는 숨기거나 제목의 섹션을 보여줍니다 중 하나 섹션 제목을 필요로 할 때 그 제목에 사용자 프레스. mouseReleasedEvent를 사용할 수는 있지만 올바른 QAction toggle() 구현을 선호합니다. 이 문제에 대해 QLabel 이외의 다른 것을 사용할 수 있습니까?

+0

이벤트에 대해 읽는 동안 우연히 컨텍스트 메뉴에 레이블 (위젯) 동작을 사용할 수 있다는 것을 알게되었습니다. 다음과 같이 ContextMenu Policy를 설정하면됩니다. label.setContextMenuPolicy (QtCore.Qt.ActionsContextMenu) 불행히도 Action을 사용하지 않으려 고합니다. 아코디언을 만들려면 내 자신의 맞춤 위젯을 정의해야 할 것 같습니다. –

답변

2

QWidget의 기능은 컨텍스트 메뉴를 제공하는 데 사용되며 레이블을 마우스로 클릭 할 때 트리거되는 동작과 직접적인 관련이 없습니다.

따라서 어떤 종류의 mousexxxevent를 사용해야합니다.

from PySide.QtGui import * 
from PySide.QtCore import * 

class ClickableLabel(QLabel): 
    """ 
     A Label that emits a signal when clicked. 
    """ 

    clicked = Signal() 

    def __init__(self, *args): 
     super().__init__(*args) 

    def mousePressEvent(self, event): 
     self.clicked.emit() 

# example 
app = QApplication([]) 
window = QWidget() 
layout = QVBoxLayout(window) 
labelA = ClickableLabel('Click on me for more.') 
layout.addWidget(labelA) 
labelB = QLabel('Here I am.') 
layout.addWidget(labelB) 
labelB.hide() 
labelA.clicked.connect(labelB.show) 
window.show() 
app.exec_() 

또는 대신 작업을하려는 경우, 이런 식으로합니다 :

대신 신호를 선호하는 경우,이 또한 매우 쉽습니다

from PySide.QtGui import * 
from PySide.QtCore import * 

class ClickableLabel(QLabel): 
    """ 
     A Label that emits a signal when clicked. 
    """ 

    def __init__(self, *args): 
     super().__init__(*args) 

    def mousePressEvent(self, event): 
     self.action.triggered.emit() 

# example 
app = QApplication([]) 
window = QWidget() 
layout = QVBoxLayout(window) 
labelA = ClickableLabel('Click on me for more.') 
layout.addWidget(labelA) 
labelB = QLabel('Here I am.') 
layout.addWidget(labelB) 
labelB.hide() 

action = QAction('Action', labelA) 
labelA.action = action 
action.triggered.connect(labelB.show) 

window.show() 
app.exec_() 

예는 파이썬 3에 있습니다. X 표기법과 PySide에 대해서는 Python 2.X 또는 PyQt 로의 변환이 매우 간단합니다.

관련 문제