from PyQt5 import QtCore, QtGui from PyQt5.QtCore import QSize, QObject, pyqtSignal from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QPushButton, QGraphicsDropShadowEffect class ImageButton(QPushButton, QObject): doubleClicked = pyqtSignal(QtGui.QMouseEvent) def __init__(self, icon: QIcon = QIcon(), size: QSize = QSize(64, 64), tag=None, tooltip=None, parent=None): super(ImageButton, self).__init__(parent) self.setIcon(icon) self.setContentsMargins(10, 10, 10, 20) self.setCursor(QtCore.Qt.PointingHandCursor) self._size = size self._effect = self.graphicsEffect() self.setIconSize(self._size) self.setObjectName("image_button") self._tag = tag self.setStyleSheet('QPushButton{border: 0px solid;}') self.setToolTip(tooltip) # shadow.setColor(QtGui.QColor(99, 255, 255)) @property def tag(self): return self._tag @tag.setter def tag(self, value): self._tag = value def enterEvent(self, evt: QtCore.QEvent) -> None: # self.setIconSize(QSize(math.floor(self._size.width() * 1.2),math.floor(self._size.height() * 1.2))) shadow = QGraphicsDropShadowEffect(self) shadow.setBlurRadius(8) # shadow.setColor(QtGui.QColor(76,35,45).lighter()) shadow.setColor(QtGui.QColor(76, 35, 45).lighter()) shadow.setOffset(4) self.setGraphicsEffect(shadow) super(ImageButton, self).enterEvent(evt) def leaveEvent(self, evt: QtCore.QEvent) -> None: self.setGraphicsEffect(self._effect) self.setIconSize(self._size) super(ImageButton, self).leaveEvent(evt) def mouseDoubleClickEvent(self, evt: QtGui.QMouseEvent) -> None: self.doubleClicked.emit(evt)