QLabel加入点击的几种方式
QLabel默认不支持点击事件,但可以通过捕捉鼠标事件实现点击处理。
1、通过eventFilter事件过滤器
self.labelSignUp.installEventFilter(self)
def eventFilter(self, obj, event):
"""重写事件过滤器"""
# 判断事件源是否为目标label,且事件为鼠标点击
if obj == self.labelSignUp and event.type() == QEvent.MouseButtonPress:
# 判断是否为左键点击
if event.button() == Qt.LeftButton:
print("事件过滤器:Label被左键点击了")
return True # 事件已处理
return super().eventFilter(obj, event) # 其他事件交给父类处理
2、自定义QLabel,加入点击事件处理
class ClickableLabel(QLabel):
def __init__(self, parent=None):
super().__init__(parent)
def mousePressEvent(self, event):
self.clicked.emit()
clicked = QtCore.pyqtSignal()
label = ClickableLabel("点击我")
label.clicked.connect(lambda: print("QLabel被点击了"))
如果在designer上设计的UI,需要把Label控件提升为ClickableLabel。
第二种方式发现一个有意思的地方,如果通过pyqtSlot绑定点击事件时,信号名称可以随意改的。例如:
信号定义为clicked,可以用on_label_clicked进行绑定;
信号定义为pushed,用on_label_pushed绑定。
没有系统学习过pyqt,不知道这是什么特性,感觉自由度很高,有点意思。

浙公网安备 33010602011771号