sp-hydra-veil-gui/gui/v2/ui/widgets/clickable_label.py
2026-06-13 16:19:11 -04:00

68 lines
2.3 KiB
Python
Executable file

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)