如何用python的turtle模块在界面中实现自动画图

liftword2个月前 (04-30)技术文章16

turtle模块在界面中实现自动画图构想

我想用turtle模块实现一些动态的,或者说自动完成一些简单画作,当然我们不是为了学画画,重点是我们如何知道python代码是怎么去实现的。

思路、想法

我想画一棵树

然后画点叶子

然后再画点果子

为了好看,增加一些不同的果子

这个树放在夜晚

那么给夜晚加点光,比如繁星

下面先看看的具体实现,进一步方便理解我们想要实现的界面,文章这块好像不能直接发视频,那只能发下调试中的画的图片片段。

turtle模块画画的片段

前面的果实不够明显,星空用了红色,星空也改成白色,并对果实和叶子的区域进行了调试得到以下的碎片。



以下是电脑画作过程








以下是完整代码

import turtle
import random
# 初始化画布和画笔
t = turtle.Turtle()
t.speed(3)  # 最快速度
t.left(90)  # 初始方向朝上
t.penup()
t.goto(0, -200)  # 移动到画布底部中央
t.pendown()
# 设置颜色模式为HSV(便于颜色渐变)
turtle.colormode(255)
turtle.bgcolor("#1a1a1a")  # 深灰色背景
def draw_tree(branch_len, angle, width):
    """递归绘制分形树"""
    if branch_len > 5:
        # 根据分支长度计算颜色(渐变色)
        r = int(50 + branch_len * 2)
        g = int(100 + branch_len * 1.5)
        b = int(150 - branch_len * 0.5)
        t.pencolor(r, g, b)
       
        t.pensize(width)
        t.forward(branch_len)
       
        # 绘制右侧分支
        t.right(angle)
        draw_tree(branch_len - random.randint(10,15), angle * 0.8, width * 0.7)
       
        # 绘制左侧分支
        t.left(angle * 2)
        draw_tree(branch_len - random.randint(10,15), angle * 0.8, width * 0.7)
       
        # 返回原位置
        t.right(angle)
        t.backward(branch_len)
# 开始绘制(初始参数可调整效果)
draw_tree(80, 30, 12)
# 添加装饰性星星
for _ in range(60):
    t.penup()
    t.goto(random.randint(-150,85), random.randint(-100,75))
    t.pendown()
    t.pencolor("green")#gold 金色
    t.dot(random.randint(3,6))#画圆心,用随机直径()像素,你也可以画其他的
for _ in range(60):
    t.penup()
    t.goto(random.randint(-150,85), random.randint(-100,75))
    t.pendown()
    t.pencolor("gold")#gold 金色
    t.dot(random.randint(5,10))#画圆心,用随机直径()像素,你也可以画其他的
for _ in range(60):
    t.penup()
    t.goto(random.randint(-150,85), random.randint(-100,75))
    t.pendown()
    t.pencolor("red")#gold 金色
    t.dot(random.randint(5,10))#画圆心,用随机直径()像素,你也可以画其他的
for _ in range(60):#画的个数
    t.penup()
    t.goto(random.randint(-150,80), random.randint(-80,50))#x(左负,右正),y轴(下负上正)
    t.pendown()
    t.pencolor("#ffff99")
    t.dot(random.randint(2,5))
for _ in range(80):
    t.penup()
    t.goto(random.randint(-300,300), random.randint(-200,300))
    t.pendown()
    t.pencolor("#ffff99")  # 浅黄色
    #t.pencolor("white")
    t.dot(random.randint(2,5))
for _ in range(80):
    t.penup()
    t.goto(random.randint(-300,300), random.randint(-200,300))
    t.pendown()
   #t.pencolor("#ffff99")  # 浅黄色
    t.pencolor("white")#加点亮一点的星星
    t.dot(random.randint(2,5))

# 开始绘制
t.hideturtle()
turtle.done()

你也可以增加下别的什么东西,你怎么想就怎么加吧,我玩累了。创造都很难,一点也不容易,要不是一点兴趣,这三瓜两枣的真不愿意,推送全看头条君的心情,能看到的全看缘分,即见既所的,以此献给一些刻苦学习的有缘之人。


相关文章

必知必会!Python json模块全解析(python jsonpath-rw)

深入掌握Python json模块:从基础到实战的全面指南在当今数据驱动的时代,高效的数据处理与交换至关重要。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格...

python进阶突破内置模块——数据序列化与格式

数据序列化是将数据结构或对象转换为可存储/传输格式的过程,反序列化则是逆向操作。Python 提供了多种工具来处理不同场景下的序列化需求。一、核心内置模块1.json模块最常用的轻量级数据交换格式,适...

Python的shutil模块:文件处理的得力助手

对话实录小白:(苦恼)我在Python中处理文件时,总是觉得自带的open函数不太够用,有没有更强大的工具呀?专家:(微笑)那你可不能错过shutil模块!它就像是文件处理的瑞士军刀,提供了大量便捷的...

Python之函数式编程:funcy,功能更加齐全的函数式编程库

引言通过前面的关于Python中进行函数式编程的系列文章的介绍,我们已经把函数式编程范式中的相关特性,以及Python内置的类、functools模块对函数式编程范式的支持,都介绍了一遍。今天这篇文章...

如何使Python类可JSON序列化(python json 类)

技术背景在Python开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式。然而,Python的json模块默认只能序列化一些基本数据类型,如字典、列表、字...

Python常用内置模块介绍——文件与系统操作详解

Python提供了多个强大的内置模块用于文件和系统操作,下面我将详细介绍最常用的几个模块及其核心功能。1.os模块 - 操作系统交互os模块提供了与操作系统交互的接口,包括文件/目录操作、进程管理、环...