class RaisedButton(QPushButton): """RaisedButton(str text, color, QSize size, QWidget parent=None""" def __init__(self, text, color, size=QSize(80, 30), parent=None): super(RaisedButton, self).__init__(parent) self.resize(size) if color == None: color = QColor(66, 165, 245) else: color = QColor(color) self.isFlat = True self.color = color self.setText(text) self.effect = QGraphicsDropShadowEffect(self.parent()) self.effect.setOffset(3) self.effect.setColor(QColor(0, 0, 0, 40)) self.setGraphicsEffect(self.effect) self.press = False with open("QPushButton-Raised.qss") as f: dat = f.read() color1 = color.name() color2 = color.lighter().name() dat = dat % (str(color1), str(color2)) self.setStyleSheet(dat) def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.effect.setEnabled(False) self.press = True def mouseReleaseEvent(self, event): if event.button() == Qt.LeftButton: self.effect.setEnabled(True) self.press = False
class FloatingActionButton(QPushButton): def __init__(self, color=QColor(243, 40, 109, 255), radius=50, icon="plus.png", parent=None): super(FloatingActionButton, self).__init__(parent) if icon: self.pixmap = QPixmap(icon) self.setMouseTracking(True) self.effect = QGraphicsDropShadowEffect(self.parent()) self.effect.setXOffset(4) self.effect.setBlurRadius(4) self.effect.setColor(QColor(0, 0, 0, 40)) self.setGraphicsEffect(self.effect) self.color = color self.radius = radius self.resize(self.radius + 1, self.radius + 1) self.setMaximumSize(self.size()) self.setMinimumSize(self.size()) self.effect_size = self.radius def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.HighQualityAntialiasing) painter.setRenderHint(QPainter.Antialiasing) painter.setRenderHint(QPainter.SmoothPixmapTransform) painter.setBrush(self.color) if self.effect_size == self.radius: painter.drawEllipse(1, 1, self.radius - 1, self.radius - 1) painter.drawPixmap(QRect(14, 14, self.radius / 2, self.radius / 2), self.pixmap) else: painter.drawEllipse(self.width() / 2, self.height() / 2, self.effect_size, self.effect_size) painter.end() def mousePressEvent(self, event): if event.button() == Qt.LeftButton: self.animate() def animate(self): while self.effect_size > 1: self.effect_size -= 2 self.repaint() time.sleep(0.008)
def createGlowEffect(parent=None, color=GLOW_COLOR, radius=16, offset=1): """ @param* parent QWidget @param* color QColor or str or None @param* radius int @param* offset int @return QGraphicsEffect """ #if skos.MAC: # graphics effect on mac is not observable # return None #from pyeffects import GraphicsTextShadowEffect #ret = GraphicsTextShadowEffect(parent) ret = QGraphicsDropShadowEffect(parent) ret.setBlurRadius(radius) ret.setOffset(offset) if color: if not isinstance(color, QColor): color = QColor(color) ret.setColor(color) return ret