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