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

liftword1周前 (04-30)技术文章1

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进阶实战:如何使用自定义模块(包)?

有时,我们希望在py文件中导入其他py文件中的函数或类等功能,这样就可以将自己编写的代码进行重复使用,并且可以规范化积累自己的代码,成为自己代码学习的重要成果。当然,可以将这些模块化的代码共享出来,供...

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

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

9-Python自定义函数(python自定义一个函数)

1-概念在Python中,自定义函数是指由用户根据自身需求定义的函数。通过定义自己的函数,可以将代码组织成可重用的模块,提高代码的可读性和维护性。此外,函数还可以接受参数并返回结果,使得程序逻辑更加清...

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

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

Python其实很简单 第十四章 模块(python入门之模块第二关)

模块是一组程序代码,可以是别人已经写好的,也可以是自己编写的,但都是已经存在的,在编程时直接使用就可以了。模块机制的最大好处就是程序员不再编写重复的代码,而直接利用已有的成果,这样就能将更多的精力投入...

Python import自定义模块报错、自定义异常、字符串处理、截取

一、python import自定义的模块报错问题现象:pycharm中运行一切正常,但是到命令行中(cmd命令行或pycharm的Terminal窗口)运行py文件,就会报错No module na...