Python七彩花朵

系列文章

序号 直达链接
Tkinter
1 Python李峋同款可写字版跳动的爱心
2 Python跳动的双爱心
3 Python蓝色跳动的爱心
4 Python动漫烟花
5 Python粒子烟花
Turtle
1 Python满屏飘字
2 Python蓝色流星雨
3 Python金色流星雨
4 Python漂浮爱心
5 Python爱心光波①
6 Python爱心光波②
7 Python满天繁星
8 Python五彩气球
9 Python白色飘雪
10 Python七彩花朵
11 Python 3D星空
12 Python大雪纷飞
13 Python一闪一闪亮星星
14 Python爱心泡泡
15 Python爱心射线
16 Python圣诞礼物
17 Python礼物圣诞树
18 Python浪漫星空
19 Python飞舞蝙蝠
20 Python万圣礼物
21 Python蓝色飘雪
Pygame
1 Python跨年烟花
2 Python炫酷烟花
3 Python黑客帝国字母雨
敬请期待......

写在前面

Python绘制七彩花朵动画的完整代码。

技术需求

  1. Turtle 图形库

    • 利用 turtle 模块实现图形绘制与动画控制。作为 Python 的标准图形化编程库,turtle 提供了直观的绘图功能。
    • 通过 Pen 类创建画笔对象,灵活调整其位置、颜色、方向和路径,以绘制花朵及其动态效果。
  2. 随机数生成

    • 借助 random 模块生成随机数,使花朵的位置、颜色、大小及运动速度等属性随机化,提升动画的多样性和趣味性。
    • random.randint()random.uniform() 分别用于生成整数和浮点数,确保花朵属性的随机分配。
  3. 数学函数

    • 运用 math 模块中的 sin() 函数,模拟花朵的左右摆动。借助正弦波,实现花朵在水平方向上的周期性运动,营造自然漂浮的效果。
  4. 面向对象编程(OOP)

    • 定义 Flower 类,每朵花均为该类的实例。此类包含花朵的属性(如位置、颜色、大小)和方法(如移动、绘制),赋予每个花朵独立的行为和状态。
  5. 动画与画面更新

    • 使用 tu.tracer(0)tu.update() 调节动画更新频率,消除画面闪烁,确保动画流畅。
    • 在每次画面更新前调用 t.clear() 清除先前内容,实现动态变化效果。
  6. 无限循环与事件驱动

    • 采用 while True 实现无限循环,持续更新和绘制花朵,保证动画连续运行。
    • tu.mainloop() 启动主事件循环,维持图形窗口开启状态,直至用户关闭窗口。

完整代码

python 复制代码
import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red','skyblue','orange','yellow','lime','pink','violet']
class Flower():    #每个花朵(花朵类)
    def __init__(self):
        self.r = ra.randint(8,12)        #花朵的半径
        self.x = ra.randint(-1000,1000)   #花朵的横坐标
        self.y = ra.randint(-500,500)     #花朵的纵坐标
        self.f = ra.uniform(-3.14,3.14)   #花朵左右移动呈正弦函数
        self.speed = ra.randint(5,10)     #花朵移动速度
        self.color = ra.choice(colors)    #花朵的颜色
        self.outline = 1                  #花朵的外框大小(可不要)
    def move(self):                    #花朵移动函数
        if self.y >= -500:            #当花朵还在画布中时
            self.y -= self.speed     #设置上下移动速度
            self.x += self.speed * math.sin(self.f)    #设置左右移动速度
            self.f += 0.1            #可以理解成标志,改变左右移动的方向
        else:                        #当花朵漂出了画布时,重新生成一个花朵
            self.r = ra.randint(8,12)
            self.x = ra.randint(-1000,1000)
            self.y = 500
            self.f = ra.uniform(-3.14,3.14)
            self.speed = ra.randint(5,10)
            self.color = ra.choice(colors)
            self.outline = 1
......

代码分析

这段代码利用 Python 的 Turtle 图形库和随机模块,通过定义一个花朵类来模拟屏幕上随机漂浮的花朵。核心在于主循环中随机生成花朵的位置、颜色、大小及运动方式,使花朵呈现出自由飘动的效果。以下是代码的详细分析。

1. 模块导入与初始设置

python 复制代码
import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red', 'skyblue', 'orange', 'yellow', 'lime', 'pink', 'violet']
  • turtle 模块用于图形绘制和动画,此处别名为 tu
  • random 模块生成随机数,支持花朵的随机生成与运动。
  • math 模块提供数学函数,如正弦函数 (math.sin) 控制花朵的左右移动。
  • tu.setup(1.0, 1.0) 设置画布为全屏模式。
  • t = tu.Pen() 创建 Pen 对象用于绘图,t.ht() 隐藏画笔箭头。
  • colors 列表存储花朵可能的颜色,供随机选择。

2. 花朵类(Flower)

花朵类是动画的核心,描述每朵花的属性和行为。

2.1 构造方法(__init__

python 复制代码
class Flower:
    def __init__(self):
        self.r = ra.randint(8, 12)        # 花朵半径
        self.x = ra.randint(-1000, 1000)   # 横坐标
        self.y = ra.randint(-500, 500)     # 纵坐标
        self.f = ra.uniform(-3.14, 3.14)   # 左右移动角度
        self.speed = ra.randint(5, 10)     # 移动速度
        self.color = ra.choice(colors)     # 颜色
        self.outline = 1                   # 外框大小
  • self.r 设定花朵半径,范围 8 至 12。
  • self.xself.y 分别设定横纵坐标,范围分别为 -1000 至 1000 和 -500 至 500。
  • self.f 决定左右摇动程度,范围 -π 至 π。
  • self.speed 设定移动速度,范围 5 至 10。
  • self.color 随机选择颜色。
  • self.outline 固定外框大小为 1。

2.2 移动方法(move

该方法更新花朵坐标,通过正弦函数实现水平波动运动。

  • self.y -= self.speed 实现向下移动。
  • self.x += self.speed * math.sin(self.f) 通过正弦函数实现周期性左右摆动。
  • self.f += 0.1 更新方向,改变摆动周期。
  • self.y < -500,表示花朵移出画布,重新生成并重置纵坐标为 500。

2.3 绘制方法(draw

控制是否绘制路径,移动到初始位置,设置方向和颜色,填充形状,绘制花瓣。

  • t.penup()t.pendown() 控制绘制路径。
  • t.goto(self.x, self.y) 移动至初始位置。
  • t.setheading(self.x) 设置方向。
  • t.color(self.color) 设置颜色。
  • t.begin_fill()t.end_fill() 填充形状。
  • for i in range(5): 循环绘制花瓣,使用 t.circle(self.r, extent=144) 绘制圆弧形花瓣,形成花朵整体形态。

3. 主程序

  • Flowers 列表存储所有花朵对象。
  • for i in range(100): 循环创建 100 个花朵对象。
  • tu.bgcolor('black') 设置背景色为黑色,突出花朵颜色。

4. 动画循环

  • tu.tracer(0) 禁用自动更新,避免闪烁,提高效率。
  • t.clear() 清除旧图形。
  • for i in range(50): 控制每帧 50 朵花的移动和绘制。
  • Flowers[i].move()Flowers[i].draw() 分别移动和绘制花朵。
  • tu.update() 更新画面显示花朵。

5. 事件循环

  • tu.mainloop() 启动主事件循环,持续显示窗口并响应输入。

6. 总结

此代码通过随机生成、运动和绘制花朵,实现了动态漂浮效果。每次运行时花朵表现不同,结合 turtle 库和 random 模块,展示了 Python 在图形和动画编程中的能力。

写在后面

我是一只有趣的兔子,感谢你的喜欢!