使用QAction与QLabel并使用QStackedWidget创建手风琴

时间:2014-06-22 17:21:26

标签: pyqt

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

我正在尝试使用QStackedWidget制作手风琴。

enter image description here

为此,我需要一个章节标题,当用户按下该标题时,该标题将隐藏或显示标题的部分。我可以使用mouseReleasedEvent,但我更喜欢正确的QAction toggle()实现。也许我可以使用除QLabel以外的其他东西?

1 个答案:

答案 0 :(得分:2)

addAction的{​​{1}}功能用于提供上下文菜单,并不直接与在标签上单击鼠标时触发的操作相关。

因此,您必须使用某种mousexxxevent。

如果您更喜欢信号,这也很容易:

QWidget

或者,如果您想要一个动作,请按照以下方式进行:

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

示例是Python 3.X表示法和PySide,但是转换为Python 2.X或PyQt可能非常简单。