from PyQt5 import QtCore from PyQt5.QtCore import QObject, pyqtSignal from PyQt5.QtWidgets import QLabel from view.widgets.gallery.hover_thread import HoverThread class LabelHovered(QLabel, QObject): hoverTimeout = pyqtSignal(QLabel) def __init__(self, parent=None): super(LabelHovered, self).__init__(parent) self._hover_thread = None def timeout_callback(self): self.hoverTimeout.emit(self) def enterEvent(self, evt: QtCore.QEvent) -> None: self._hover_thread = HoverThread() self._hover_thread.start() self._hover_thread.signals.timeoutSignal.connect(self.timeout_callback) super(LabelHovered, self).enterEvent(evt) def leaveEvent(self, evt: QtCore.QEvent) -> None: if self._hover_thread: self._hover_thread.join() del self._hover_thread super(LabelHovered, self).leaveEvent(evt)