资源简介
如果需要太阳,地球图片,下载好了放到一个名为res的文件夹里,取名sun.png, earth.png
代码片段和文件信息
import sys
from PyQt5.QtCore import (QEasingCurve QFileInfo QLineF QMimeData
QPoint QPointF QPropertyAnimation QRectF Qt)
from PyQt5.QtGui import (QBrush QColor QDrag QImage QPainter QPen
QPixmap QPainterPath)
from PyQt5.QtWidgets import (QApplication QGraphicsItem QGraphicsobject
QGraphicsScene QGraphicsView)
class Animation(QPropertyAnimation):
‘‘‘
动画类
‘‘‘
def __init__(self target prop):
‘‘‘
target prop这个两个参数分别对应:动画的产生对象和setter
‘‘‘
super(Animation self).__init__(target prop)
def updateCurrentTime(self currentTime):
‘‘‘
currentTime(此属性保存动画的当前时间和进度)总是在变化的。
每次动画的currentTime更改时,都会调用updateCurrentTime()函数
‘‘‘
self.m_path = QPainterPath()
if self.m_path.isEmpty():
end = self.endValue()
start = self.startValue()
# endValue()、startValue()分别表示动画的结束值和起始值
self.m_path.addEllipse(QRectF(start end))
# 在指定的boundingRectangle内创建一个椭圆,这里是QRectF(start end),并将其作为封闭的子路径添加到painter路径中。
dura = self.duration()
progress = (((currentTime - 1) % dura) + 1) / float(dura)
# duration()此属性保存动画的持续时间(以毫秒为单位)。 默认持续时间为250毫秒。progress则描绘了当前的完成比率。
easedProgress = self.easingCurve().valueForProgress(progress)
if easedProgress > 1.0:
easedProgress -= 1.0
elif easedProgress < 0:
easedProgress += 1.0
# 返回进度缓和曲线的有效进度。 进度必须介于0和1之间,而返回的有效进度可能超出这些范围。大于1就减1,小于0就加1。
pt = self.m_path.pointAtPercent(easedProgress)
# 返回当前路径的百分比easedProgress处的点。
# 参数easedProgress必须介于0和1之间。当存在曲线时,百分比参数被映射到贝塞尔方程的t参数。
self.updateCurrentValue(pt)
# 每次动画的当前值更改时,都会调用updateCurrentValue()。pt参数是新的当前值。没有这个函数动画动不了。
self.valueChanged.emit(pt)
def startAnimation(self startx starty endx endy duration):
‘‘‘
setStartValue()、setEndValue()分别表示设置动画的起止位置,setDuration()设置动画的运行时间。
‘‘‘
self.setStartValue(QPointF(startx starty))
self.setEndValue(QPointF(endx endy))
self.setDuration(duration)
self.setLoopCount(-1)
# 值为-1时,动画将永远循环直至停止
self.start()
# 开始运行动画
class PlanetTypeItem(QGraphicsItem):
‘‘‘
自定义QGraphicsItem类
‘‘‘
def __init__(self PlanetType=“sun“):
super(PlanetTypeItem self).__init__()
self.type = PlanetType
self.setCursor(Qt.OpenHandCursor)
self.setAcceptedMouseButtons(Qt.LeftButton)
# 设置下我们鼠标放在地球、太阳上的形状
def boundingRect(self):
‘‘‘
这个纯虚函数将图元的外边界定义为矩形;
所有绘画必须限制在图元的边界矩形内。
QGraphicsView使用它来确定图元是否需要重绘。
‘‘‘
return QRectF(0 0 55 55)
def paint(self painter option widget):
‘‘‘
这里画出太阳或者地球。先画出一个圆形,颜色是深灰色,其次是在深灰色的基础上画出具体的星球。
‘‘‘
painter.setPen(Qt.NoPen)
paint
相关资源
- Supervised Learning with Python
- python实现一个简单的名片管理系统功
- Python源码剖析.pdf59505
- python语言实现的基于opencv的表针识别
- 基于Python的酒店管理系统
- pycaret数据挖掘实践
- 打砖块
- python数据结构
- numpy,pandas,matplotlib速查手册
- python实现SGBM图像匹配算法
- python实现灰度直方图均衡化
- scrapy_qunar_one
- Python学习全系列教程永久可用
- python简明教程.chm
- 抽奖大转盘python的图形化界面
- 双边滤波器实验报告及代码python
- python +MYSQL+HTML实现21蛋糕网上商城
- Python-直播答题助手自动检测出题搜索
- OpenCV入门教程+OpenCV官方教程中文版
- Python 串口工具源码+.exe文件
- Python开发的全栈股票系统.zip
- Python操作Excel表格并将其中部分数据写
- python书籍 PDF
- 利用python绘制散点图
- python+labview+No1.vi
- 老男孩python项目实战
- python源码制作whl文件.rar
- python3.5可用的scipy
- PYTHON3 经典50案例.pptx
- 计算机科学导论-python.pdf
评论
共有 条评论