Анимация кнопки при нажатии

180
17 июля 2019, 19:50

Пытаюсь найти примеры как задать анимацию кнопки при нажатии и наведении на неё. Пока без успешно, гугл мне не хочет помогать. Прошу поделиться секретными манускриптами)

В идеале хочу совместить css анимацию c QPushButton

Answer 1

Как вариант:

import sys
from PyQt5.QtCore    import QPropertyAnimation, QRect
from PyQt5.QtWidgets import (QApplication, QPushButton, QWidget, 
                            QHBoxLayout, QSpacerItem, QSizePolicy)
class ZoomButton(QPushButton):
    def __init__(self, *args, **kwargs):
        super(ZoomButton, self).__init__(*args, **kwargs)
        self._animation = QPropertyAnimation(
            self, b'geometry', self, duration=200)
    def updatePos(self):
        # Запишите свое собственное фиксированное значение геометрии
        self._geometry = self.geometry()
        self._rect = QRect(
            self._geometry.x() - 6,
            self._geometry.y() - 2,
            self._geometry.width() + 12,
            self._geometry.height() + 4
        )
    def showEvent(self, event):
        super(ZoomButton, self).showEvent(event)
        self.updatePos()
    def enterEvent(self, event):
        super(ZoomButton, self).enterEvent(event)
        self._animation.stop()               # Остановить анимацию
        # Изменить начальное значение анимации
        self._animation.setStartValue(self._geometry)
        # Изменить конечное значение анимации
        self._animation.setEndValue(self._rect)
        self._animation.start()
    def leaveEvent(self, event):
        super(ZoomButton, self).leaveEvent(event)
        self._animation.stop()               
        self._animation.setStartValue(self._rect)
        self._animation.setEndValue(self._geometry)
        self._animation.start()
    def mousePressEvent(self, event):
        self._animation.stop()  
        self._animation.setStartValue(self._rect)
        self._animation.setEndValue(self._geometry)
        self._animation.start()
        super(ZoomButton, self).mousePressEvent(event)

class TestWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super(TestWindow, self).__init__(*args, **kwargs)
        # 1. Присоединяйтесь к макету
        layout = QHBoxLayout(self)
        layout.addSpacerItem(QSpacerItem(
            40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
        self.button1 = ZoomButton('Кнопка', self)
        layout.addWidget(self.button1)
        layout.addSpacerItem(QSpacerItem(
            40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
    def showEvent(self, event):
        super(TestWindow, self).showEvent(event)
        # Обновить расположение кнопки
        self.button1.updatePos()
    def resizeEvent(self, event):
        super(TestWindow, self).resizeEvent(event)
        # Обновить расположение кнопки
        self.button1.updatePos()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet("""
    QPushButton {
        border: none;
        font-weight: bold;
        font-size: 16px;
        border-radius: 18px;
        min-width: 180px;
        min-height: 40px;
        background-color: blue; /*white;*/
    }
    QPushButton:hover {
        background-color: #64b5f6;
    }
    QPushButton:pressed {
        background-color: #bbdefb;    
    }
    """)
    w = TestWindow()
    w.show()
    sys.exit(app.exec_())

READ ALSO
Событие 'fetch' в ServiceWorker

Событие 'fetch' в ServiceWorker

Интересует такой вопрос, срабатывает ли событие fetch в ServiceWorker при обращении к не-origin доменам? Или же можно обрабатывать обращения только на свой...

142
Обход запрета автозапуск iframe Chrome

Обход запрета автозапуск iframe Chrome

Я делаю веб страничку, которая ведет стрим с youtube, как мне сделать, чтобы при запуске страницы видео начинало идти со звуком? Если я запускаю...

131
Смена иконки (реализация)

Смена иконки (реализация)

Ниже код, в котором должна иконка microphone меняться на microphone-slash и наоборот в зависимости от режима отображения (воспроизведение или пауза)

126
Есть ссылка, и надо открыть jquery(ajax) блок

Есть ссылка, и надо открыть jquery(ajax) блок

С новым годом всех! Есть ссылка <a href='id?<php script>'>Статистика</a> она у меня находиться в меню юзера, но если просто добавить #tabs-2 к той...

139