from PyQt6.QtWidgets import QLabel, QApplication from PyQt6.QtGui import QPainter, QColor from PyQt6.QtCore import Qt, QTimer, pyqtSignal class ClickableLabel(QLabel): clicked = pyqtSignal() def __init__(self, text, parent=None, **kwargs): super().__init__(text, parent, **kwargs) self.setCursor(Qt.CursorShape.PointingHandCursor) self.hover_width = self.width() self.is_hovered = False def mousePressEvent(self, event): self.clicked.emit() super().mousePressEvent(event) def enterEvent(self, event): self.is_hovered = True self.update() super().enterEvent(event) def leaveEvent(self, event): self.is_hovered = False self.update() super().leaveEvent(event) def set_hover_width(self, width): self.hover_width = width self.update() def paintEvent(self, event): super().paintEvent(event) if self.is_hovered: painter = QPainter(self) painter.setRenderHint(QPainter.RenderHint.Antialiasing) hover_color = QColor(255, 255, 255, 25) center_x = self.width() // 2 start_x = center_x - (self.hover_width // 2) painter.fillRect(start_x, 0, self.hover_width, self.height(), hover_color) painter.end() class ClickableValueLabel(QLabel): def __init__(self, text: str, parent=None): super().__init__(text, parent) self.setObjectName("value_label") self.setStyleSheet( "color: #00ffff; font-size: 13px; font-weight: bold;") self.setCursor(Qt.CursorShape.PointingHandCursor) self.timer = QTimer(self) self.timer.setSingleShot(True) self.timer.timeout.connect(self.reset_style) self.default_style = "color: #00ffff; font-size: 13px; font-weight: bold;" self.success_style = "color: #00ff00; font-size: 13px; font-weight: bold;" def mousePressEvent(self, event): if event.button() == Qt.MouseButton.LeftButton: clipboard = QApplication.clipboard() clipboard.setText(self.text()) self.setStyleSheet(self.success_style) self.timer.start(100) def reset_style(self): self.setStyleSheet(self.default_style)