python实现圆的旋转动画_pyqt5 动画学习(四) 旋转动画,使用QGraphicsView让自己的控件旋转起来...

#!/usr/bin/python3#-*- coding: utf-8 -*-

"""Author: semishigure

Website: zetcode.com

Last edited: 2018.03.09"""

from PyQt5.QtCore import *

from PyQt5.QtGui import *

from PyQt5.QtWidgets import *

importcgitbimportsys

cgitb.enable(format='text') #解决pyqt5异常只要进入事件循环,程序就崩溃,而没有任何提示

classBall(QObject):def __init__(self):

super().__init__()

pixmap= QPixmap("../star.png")

scaledPixmap= pixmap.scaled(50, 55)

self.animation()

self.pixmap_item=QGraphicsPixmapItem(scaledPixmap)

self.pixmap_item.setTransformOriginPoint(25, 27.5) #设置中心为旋转

self._set_pos(QPointF(5, 30)) #设置图标的初始位置

def_set_pos(self, pos):

self.pixmap_item.setPos(pos)def_set_rotation(self, angle):

self.pixmap_item.setRotation(angle.x())#旋转度数

defanimation(self):

self.anim= QPropertyAnimation(self, b'pos')

self.anim.setDuration(1000)

self.anim.setStartValue(QPointF(5, 30))

self.anim.setKeyValueAt(0.3, QPointF(144, 30))

self.anim.setKeyValueAt(0.5, QPointF(54, 90))

self.anim.setKeyValueAt(0.8, QPointF(240, 250))

self.anim.setEndValue(QPointF(300, 60))

self.anim2= QPropertyAnimation(self, b'rotation')

self.anim2.setDuration(1000)

self.anim2.setStartValue(QPointF(0,1))

self.anim2.setEndValue(QPointF(360, 1))

pos= pyqtProperty(QPointF, fset=_set_pos)

rotation= pyqtProperty(QPointF, fset=_set_rotation)classMyview(QGraphicsView):def __init__(self):

super().__init__()

self._set_color(QColor(105, 105, 105))

self.iniAnimation()def_set_color(self, col):

self.palette=QPalette()#self.palette.setColor(self.backgroundRole(), col)

self.palette.setBrush(self.backgroundRole(), col)

self.setPalette(self.palette)definiAnimation(self):

self.anim3= QPropertyAnimation(self, b'color')

self.anim3.setDuration(1000)

self.anim3.setStartValue(QColor(105, 105, 105))

self.anim3.setKeyValueAt(0.1, QColor(255, 255, 240))

self.anim3.setKeyValueAt(0.3, QColor(219, 225, 171))

self.anim3.setKeyValueAt(0.7, QColor(148, 214, 184))

self.anim3.setEndValue(QColor(86, 199, 170))

color= pyqtProperty(QColor, fset=_set_color)classMainWindow(Myview):def __init__(self):

super().__init__()

self.initView()

self.iniui()definitView(self):

self.ball=Ball()

self.scene=QGraphicsScene(self)

self.scene.setSceneRect(0, 0,300, 300)

self.scene.addItem(self.ball.pixmap_item)

self.setScene(self.scene)

self.setWindowTitle("Ball animation")

self.setRenderHint(QPainter.Antialiasing)

self.setGeometry(300, 300, 500, 350)

self.show()definiui(self):

self.btn= QPushButton("开始")

self.maingrid=QHBoxLayout()

self.maingrid.addStretch(1)

self.maingrid.addWidget(self.btn)

self.btn.clicked.connect(self.runAnim)

self.maingrid2=QVBoxLayout()

self.maingrid2.addStretch(1)

self.maingrid2.addLayout(self.maingrid)

self.setLayout(self.maingrid2)defrunAnim(self):

self.ball.anim.start()

self.ball.anim2.start()

self.anim3.start()if __name__ == '__main__':

app=QApplication(sys.argv)

ex=MainWindow()

sys.exit(app.exec_())

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值