gpt4 book ai didi

pyqt - 将 QAction 与 QLabel 结合使用并使用 QStackedWidget 创建 Accordion

转载 作者:行者123 更新时间:2023-12-02 04:29:30 25 4
gpt4 key购买 nike

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

我正在尝试使用 QStackedWidget 制作 Accordion 。

enter image description here

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

最佳答案

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

因此,您必须使用某种 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_()

该示例采用 Python 3.X 表示法并适用于 PySide,但转换为 Python 2.X 或 PyQt 可能非常简单。

关于pyqt - 将 QAction 与 QLabel 结合使用并使用 QStackedWidget 创建 Accordion ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24353725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com