python turtle绘画案例教程


崧峻
原创
发布时间: 2025-06-21 14:26:28 | 阅读数 0收藏数 0评论数 0
封面
.python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics),turtle库是python的内部库,使用导入即可 :import turtle
1

绘画直线

  1. turtle.penup():画笔抬起->暂停绘画
  2. turtle.color():设置颜色 第二个参数是画笔的颜色
  3. turtle.goto():画笔绘画线段
  4. turtle.pendown():画笔落下->开始绘画


import turtle

turtle.penup()
turtle.color('black', 'black')
turtle.goto(200, 100)
turtle.pendown()

turtle.goto(200, -100)
turtle.goto(-200, -100)
turtle.goto(-200, 100)
turtle.goto(200, 100)
turtle.goto(5, 215)
turtle.goto(-200, 100)

turtle.done()

绘画好的效果如图


2

绘画圆形

  1. turtle.width():线段的宽度
  2. turtle.color("color"):设置颜色
  3. turtle.circle():圆的半径



import turtle

turtle.width(20)
turtle.color("black")
turtle.circle(200) # 画圆

turtle.done()

现在你已经会画圆了


3

绘画彩色图形


  1. speed(9):画笔速度
  2. pensize(2):画笔的宽度
  3. bgcolor("black"):画布背景色
  4. left(91) :向左侧旋转


from turtle import *
speed(9) # 画笔速度
pensize(2) # 画笔的宽度
bgcolor("black") # 画布背景色
colors = ["red","yellow","purple","blue"] # 定义画笔线色
for x in range(400): # 循环一次 画一条线
forward(2*x) # 向当前方向前进n像素
color(colors[x % 4]) # 根据求余 调整画笔线色
left(91) # 向左旋转91度

mainloop()

把现在你也会旋转了


4

绘画时钟

现在在你刚刚画的那些的基础上加上一些函数 定时延迟等等


import turtle
from datetime import *

# 抬起画笔,向前运动一段距离放下
def Skip(step):
turtle.penup()
turtle.forward(step)
turtle.pendown()


def mkHand(name, length):
# 注册Turtle形状,建立表针Turtle
turtle.reset()
Skip(-length * 0.1)
# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
turtle.begin_poly()
turtle.forward(length * 1.1)
# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
turtle.end_poly()
# 返回最后记录的多边形。
handForm = turtle.get_poly()
turtle.register_shape(name, handForm)


def Init():
global secHand, minHand, hurHand, printer
# 重置Turtle指向北
turtle.mode("logo")
# 建立三个表针Turtle并初始化
mkHand("secHand", 135)
mkHand("minHand", 125)
mkHand("hurHand", 90)
secHand = turtle.Turtle()
secHand.shape("secHand")
minHand = turtle.Turtle()
minHand.shape("minHand")
hurHand = turtle.Turtle()
hurHand.shape("hurHand")

for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)

# 建立输出文字Turtle
printer = turtle.Turtle()
# 隐藏画笔的turtle形状
printer.hideturtle()
printer.penup()


def SetupClock(radius):
# 建立表的外框
turtle.reset()
turtle.pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0:
turtle.forward(20)
Skip(-radius - 20)

Skip(radius + 20)
if i == 0:
turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
elif i == 30:
Skip(25)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-25)
elif (i == 25 or i == 35):
Skip(20)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-20)
else:
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-radius - 20)
else:
turtle.dot(5)
Skip(-radius)
turtle.right(6)


def Week(t):
week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]


def Date(t):
y = t.year
m = t.month
d = t.day
return "%s-%d-%d" % (y, m, d)


def Tick():
# 绘制表针的动态显示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)

turtle.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center", font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center", font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True)

# 100ms后继续调用tick
turtle.ontimer(Tick, 100)


def main():
# 打开/关闭龟动画,并为更新图纸设置延迟。
turtle.tracer(False)
Init()
SetupClock(160)
turtle.tracer(True)
Tick()
turtle.done()


if __name__ == "__main__":
main()

5

毕业!


加入随机函数 和循环 绘画一个樱花树


# 每次运行 树的形状是随机的
import turtle as T
import random
import time

# 画樱花的躯干(60,t)
def Tree(branch, t):
time.sleep(0.0005)
if branch > 3:
if 8 <= branch <= 12:
if random.randint(0, 2) == 0:
t.color('snow') # 白
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 3)
elif branch < 8:
if random.randint(0, 1) == 0:
t.color('pink') # 粉色
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 2)
else:
t.color('sienna')
t.pensize(branch / 10) # 6
t.forward(branch)
a = 1.5 * random.random()
t.right(20 * a)
b = 1.5 * random.random()
Tree(branch - 10 * b, t)
t.left(40 * a)
Tree(branch - 10 * b, t)
t.right(20 * a)
t.up()
t.backward(branch)
t.down()


# 绘图区域
t = T.Turtle()
# 画布大小
w = T.Screen()
t.hideturtle() # 隐藏画笔
t.getscreen().tracer(5, 0)
w.screensize(bg='white') # 白色背景
t.left(90)
t.up()
t.backward(100)
t.down()
t.color('sienna')

# 画樱花的躯干
Tree(60, t)
w.exitonclick()
T.done()


阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载