我正在尝试使用 QLabel.addAction() 方法将 QAction 对象添加到 QLabel 对象,但它似乎不起作用。它不应该起作用还是我做错了什么?
我正在尝试使用 QStackedWidget 制作手风琴。

为此,我需要一个部分标题,当用户按下该标题时,它将隐藏或显示标题的部分。我可以使用 mouseReleasedEvent,但我更喜欢正确的 QActiontoggle() 实现。也许我可以使用 QLabel 以外的其他东西来解决这个问题?
addAction的功能用于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_()
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要一个动作,请像这样:
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_()
Run Code Online (Sandbox Code Playgroud)
该示例采用 Python 3.X 表示法并适用于 PySide,但转换为 Python 2.X 或 PyQt 可能非常简单。