gpt4 book ai didi

python - 为 QWidget 和派生类实现事件处理程序并避免代码重复

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:04 26 4
gpt4 key购买 nike

我通过在 Python 中继承如下方式创建了一个可点击的 QWidget(使用 Python-Qt 绑定(bind)):

class ClickableWidget(QtGui.QWidget):

clicked = QtCore.Signal(QtGui.QMouseEvent)

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

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

当然可以实现更多事件和更多信号。

我想向QLabelQToolBar等添加相同的功能。这当然可以通过相同的方式轻松完成,从而导致大量代码重复。

是否有更好的替代方案,可以最大限度地减少代码重复,并且代码高效且易于维护?最像 Qt/Python 的方式是什么?

一种替代方案可能是在 Qt 应用程序上安装事件过滤器(?)来过滤发送到任何所需小部件的所有事件,但这可能会变得复杂,必须区分目标对象。

最佳答案

您可以创建一个函数来定义子类

def createClickableSubclass(parent):
class ClickableSubclass(parent):
clicked_ = QtCore.Signal(QtGui.QMouseEvent)

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

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

return ClickableSubclass


MyLabel = createClickableSubclass(QtGui.QLabel)
MyToolBar = createClickableSubclass(QtGui.QToolBar)
<小时/>

编辑:引用您的评论,您将使用如下子类:

aLabel = MyLabel('Label text')
aLabel.setStyleSheet('color: yellow')

关于python - 为 QWidget 和派生类实现事件处理程序并避免代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677882/

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