Python Turtle:一个简单而强大的图形绘制工具

Python的Turtle模块是一个非常适合初学者的绘图库,它使用简单的命令来控制海龟在屏幕上移动,从而创造出各种有趣的图形和设计。下面是一个详细的教程,帮助你掌握Python Turtle库的使用。

一、安装和导入Turtle模块

首先,确保你的Python环境已经安装。然后,导入Turtle模块。在Python中,我们使用import语句来导入模块。

import turtle

二、创建Turtle对象

在Turtle模块中,我们使用Turtle()函数来创建一个Turtle对象。我们可以将这个对象想象成一个可以在屏幕上移动的虚拟海龟。

my_turtle = turtle.Turtle()

三、控制海龟移动

通过Turtle对象,我们可以使用一系列的命令来控制海龟的移动。例如:

  • forward(distance):使海龟向前移动指定的距离。

  • backward(distance):使海龟向后移动指定的距离。

  • left(angle):使海龟向左旋转指定的角度。

  • right(angle):使海龟向右旋转指定的角度。

  • penup():提起画笔,海龟移动时不画线。

  • pendown():放下画笔,海龟移动时会画线。

例如,我们可以让海龟向前移动100个像素,然后向右旋转90度,再向前移动100个像素,最后向左旋转90度回到原点。

my_turtle.forward(100)
my_turtle.right(90)
my_turtle.forward(100)
my_turtle.left(90)

四、绘制图形和设计

通过组合使用Turtle对象的移动命令,我们可以绘制各种图形和设计。例如,我们可以绘制一个五角星:

for i in range(5):
    my_turtle.forward(100)
    my_turtle.right(144)

我们还可以绘制更复杂的设计,比如一个螺旋:

for i in range(30):
    my_turtle.forward(i * 2)
    my_turtle.right(91)

五、保存绘图和退出Turtle窗口

在完成绘图后,我们可以使用done()函数来保存绘图并退出Turtle窗口。这个函数将等待用户关闭窗口。在大多数情况下,你不需要显式调用这个函数,因为Python会在程序结束时自动调用它。但是如果你想要在绘图完成后做其他事情,或者想要在关闭窗口之前保存绘图,你可以调用这个函数。

例如,我们可以绘制一个螺旋,然后保存绘图并退出窗口:

for i in range(30):
    my_turtle.forward(i * 2)
    my_turtle.right(91)
turtle.done()

六、精美示例(草莓熊)

import turtle as t

# 设置背景颜色,窗口位置以及大小

t.colormode(255)  # 颜色模式
t.speed(0)
t.screensize(850, 760, "white")  # 画布大小背景颜色
t.setup(width=850, height=760, startx=None, starty=None)  # 绘图窗口的大小和起始坐标
# t.bgpic("di_800.gif")
t.title("逆境清醒草莓熊!")  # 设置绘图窗口的标题
t.resizemode('noresize')  # 大小调整模式:auto,user,noresize
t.tracer(1)

scolor = ["#E6005C", "#00BFFF", "#538a30", "#F28500"]  # 深色列表
qcolor = ["#FF007F", "#87CEFA", "#7fbc2b", "#FFA500"]  # 浅色列表
blsize = 80  # blsize值,blsize,是大等腰直角三角形的斜边风车等比例缩放
bs = 2 ** 0.5 / 2 * blsize  # bs是直角边,2**0.5 表示数学中的“根号2”
# zjsjxxb是小等腰直角三角形的斜边,zjb是直角边
zjb = blsize / 2  # zjb是小等腰直角三角形的直角边
zjsjxxb = 2 ** 0.5 * zjb  # zjsjxxb是小等腰直角三角形的斜边
length = 1.7 * blsize  # 风车杆长
width = 2 / 15 * blsize  # 风车杆宽


def fongche():  # 风车
    t.penup()
    t.goto(-205, -42)
    t.begin_fill()
    t.pensize(4)
    t.pencolor("#321320")
    t.fillcolor("#D2B48C")
    t.circle(15)
    t.end_fill()
    t.penup()
    t.goto(-220, 80)
    t.pendown()
    t.setheading(-90)
    t.pensize(width)
    t.pencolor("#5f4a1d")
    t.forward(length)
    t.pensize(2)
    t.backward(length)
    t.setheading(90)

    for i in range(4):
        # 小等腰直角三角形
        t.color(scolor[i])  # 遍历深色列表scolor
        t.begin_fill()
        t.forward(zjb)
        t.left(90)
        t.forward(zjb)
        t.left(135)
        t.forward(zjsjxxb)
        t.end_fill()
        # t.pencolor(scolor[i])
        # t.pensize(4)

        # 大等腰直角三角形
        t.color(qcolor[i])  # 遍历浅色列表qcolor
        t.begin_fill()
        t.backward(zjsjxxb)
        t.right(90)
        t.forward(bs)
        t.left(135)
        t.forward(blsize)
        t.end_fill()
        # t.pencolor(scolor[i])
        # t.pensize(4)

        # 旋转180度后,画下一片风车叶片
        t.right(180)
        t.penup()


mling_circle_list = iter([  # 每段弧线(半径,弧角度数)
    (18, 360), (14, 360), (10, 360), (6, 360),
    (18, 360), (14, 360), (10, 360), (6, 360),
])


def mling_draw_eyeball(zb1, zb2, zb3, zb4):
    for zb, color_ in zip([zb1, zb2, zb3, zb4], ['#ffffff', '#482d08', '#000000', '#ffffff']):
        t.penup()
        t.goto(*zb)
        t.pendown()
        t.begin_fill()
        t.setheading(0)
        t.color(color_)
        t.pencolor('#000000')
        t.pensize(2)
        t.circle(*next(mling_circle_list))
        t.end_fill()


t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#cb3263")
t.pensize(4)
t.goto(120, 110)
t.pendown()
t.begin_fill()
t.goto(200, 0)
t.left(-40)
t.circle(-110, 105)
t.left(75)
t.goto(170, -110)
t.left(-80)
t.circle(30, 40)
t.left(60)
t.circle(-80, 70)
t.left(83)
t.circle(-35, 95)
t.goto(60, -270)
t.left(-80)
t.circle(-65, 70)
t.left(63)
t.circle(35, 30)
t.left(130)
t.circle(-65, 70)
t.goto(-120, -270)
t.left(-110)
t.circle(-35, 80)
t.left(83)
t.circle(-80, 50)
t.left(60)
t.circle(-80, 60)
t.left(60)
t.circle(30, 30)
t.left(20)
t.circle(80, 80)
t.left(-105)
t.circle(-70, 150)
t.left(50)
t.circle(-170, 50)
t.goto(120, 110)
# Author:Adversity Awake
t.end_fill()
t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#ffffff")
t.pensize(4)
t.goto(90, 60)
t.pendown()
t.begin_fill()
t.right(30)
t.circle(-130, 360)
t.end_fill()
t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#f3d2ad")
t.pensize(4)
t.goto(-250, -55)
t.seth(0)
t.pendown()
t.begin_fill()
t.right(-55)
t.circle(-45, 270)
t.goto(-220, -75)
t.goto(-250, -55)
t.end_fill()

fongche()

t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#f3d2ad")
t.pensize(4)
t.goto(185, -90)
t.pendown()
t.begin_fill()
t.right(140)
t.circle(43, 95)
t.goto(185, -90)
t.end_fill()
t.penup()
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#cb3263')
t.pensize(4)
t.begin_fill()
t.goto(21, 0)
t.pendown()
t.circle(123, 134)
t.left(-90)
t.circle(40, 185)
t.left(-60)
t.circle(120, 60)
t.left(-90)
t.circle(50, 200)
t.left(-90)
t.circle(100, 100)
t.left(-12)
t.circle(100, 40)
t.goto(21, 0)
t.penup()
# Author:Adversity Awake
t.end_fill()
t.penup()
t.goto(0, 0)
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#ffffff')
t.pensize(4)
t.begin_fill()
t.goto(-70, 210)
t.left(140)
t.pendown()
t.circle(30, 200)
t.goto(-70, 210)
t.penup()
t.end_fill()
t.penup()
t.goto(0, 0)
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#ffffff')
t.pensize(4)
t.begin_fill()
t.goto(90, 220)
t.left(45)
t.pendown()
t.circle(22, 200)
t.goto(90, 220)
t.penup()
t.end_fill()
t.penup()
t.goto(0, 0)
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#ffffff')
t.pensize(4)
t.begin_fill()
t.left(-98)
t.left(90)
t.goto(18, 10)
t.pendown()
t.circle(100, 134)
t.left(10)
t.circle(110, 30)
t.left(10)
t.circle(160, 40)
t.circle(85, 40)
t.left(2)
t.circle(95, 40)
t.left(5)
t.circle(95, 60)
t.goto(18, 10)
t.penup()
t.end_fill()
t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#8f3a52")
t.pensize(2)
t.goto(25, 240)
t.pendown()
t.begin_fill()
t.goto(60, 235)
t.left(30)
t.fd(8)
t.left(90)
t.fd(22)
t.circle(90, 8)
t.left(20)
t.circle(90, 8)
t.left(20)
t.circle(90, 20)
t.left(40)
t.circle(50, 20)
t.end_fill()
t.penup()
t.pensize(12)
t.goto(-2, 250)
t.pencolor("#4D1F00")
t.fillcolor("#4D1F00")
t.pendown()
t.goto(60, 240)
t.end_fill()
t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#8f3a52")
t.pensize(2)
t.goto(-55, 193)
t.pendown()
t.begin_fill()
t.left(65)
t.circle(-90, 25)
t.goto(-10, 230)
t.left(30)
t.fd(8)
t.left(90)
t.fd(18)
t.circle(90, 8)
t.left(20)
t.circle(90, 10)
t.left(40)
t.circle(90, 30)
t.left(30)
t.circle(40, 20)
t.penup()
t.end_fill()
t.pensize(12)
t.goto(-63, 195)
t.pencolor("#4D1F00")
t.fillcolor("#4D1F00")
t.pendown()
t.left(100)
t.circle(-85, 45)
t.end_fill()

mling_draw_eyeball((-20, 180), (-23, 185), (-25, 188), (-30, 200))
mling_draw_eyeball((30, 193), (27, 200), (25, 203), (20, 213))

t.penup()
p = t.home()
t.pencolor("#321320")
t.fillcolor("#8f3a52")
t.pensize(3)
t.goto(25, 105)
p = t.pos()
t.pendown()
t.begin_fill()
t.circle(85, 65)
t.left(16)
t.circle(30, 55)
t.left(20)
t.circle(145, 58)
t.left(8)
t.circle(20, 55)
t.left(8)
t.circle(50, 65)
t.left(-5)
t.circle(310, 8)
t.end_fill()
t.penup()
t.goto(0, 0)
t.seth(0)
t.pencolor('#321320')
t.fillcolor('#a93e54')
t.pensize(3)
t.begin_fill()
t.left(-20)
t.goto(9, 66)
t.pendown()
t.circle(68, 40)
t.left(10)
t.circle(65, 40)
t.left(160)
t.circle(-75, 85)
t.left(158)
t.circle(48, 37)
t.goto(9, 66)
t.penup()
t.end_fill()
t.color('#321320')
t.penup()
t.goto(230, 60)
t.pendown()
t.write("愿\n\n\n\n\n\n", align="center", font=("黑体", 20, "normal"))
t.hideturtle()
t.done()

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

若有侵权,请联系删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值