Мне нужно попросить вас, ребята, за советом, так как у меня заканчиваются идеи.Я работаю на кликабельном ярлыке.Я уже сделал некоторый класс "clickable label" и обработал событие mouseover - которое меняет границу метки и возвращается в нормальное состояние, когда мышь уходит.
Теперь я хочу, чтобы он имел собственный эффект свечения на этикетке, но я хочу, чтобы он вернулся в нормальное состояние, скажем, через 0,5 с после нажатия.
Я хочу, чтобы моя этикетка былаизображение для имитации кнопки.time.sleep
не работает хорошо, особенно с помощью спам-кликов, он замораживает основной поток приложения.
Надеюсь, я не изобретаю велосипед, но, насколько я знаю, это путь.
Вотпример кода, любой ответ приветствуется.
from PySide2.QtWidgets import QLabel, QSizePolicy, QGraphicsDropShadowEffect
from PySide2.QtGui import QPixmap
from PySide2.QtCore import (Signal, QEvent, QObject, QRect)
class ClickableLabel(QLabel):
def __init__(self, pic_path, width, height, border_color, click_function):
super(ClickableLabel, self).__init__()
# Setting the picture path and setting pixmap to label
self.pic_path = pic_path
self.pixmap = QPixmap(self.pic_path)
self.setPixmap(self.pixmap)
# Set the size
self.setFixedSize(width, height)
# Enable tracking and assign function
self.setMouseTracking(True)
self.click_function = click_function
# Set default
if border_color is None:
self.border_color = 'lightblue'
else:
self.border_color = border_color
def mouseMoveEvent(self, event):
# event.pos().x(), event.pos().y()
self.setStyleSheet("border: 1px solid " + str(self.border_color) + ";")
def leaveEvent(self, event):
# event.pos().x(), event.pos().y()
self.setStyleSheet("border: None")
def mousePressEvent(self, event):
self.click_function()
effect = QGraphicsDropShadowEffect(self)
effect.setOffset(0, 0)
effect.setBlurRadius(20)
effect.setColor(self.border_color)
self.setGraphicsEffect(effect)