02. Python 基本图形绘制

turtle 库概述

turtle(海龟)库是 turtle 绘图体系的 Python 实现

  • turtle 绘图体系:1969 年诞生,主要用于程序设计入门
  • Python 语言的标准库之一
  • 入门级的图形绘制函数库

turtle 的绘图窗体

turtle 的一个画布空间, 最小单位是像素

绘制窗体

turtle.setup(width, height, startx, starty)

  • setup() 设置窗体大小及位置
  • 4 个参数中后两个可选
  • setup() 不是必须的

setup()设置窗体大小及位置

绝对坐标

turtle.goto( 100, 100) #去往绝对坐标
turtle.seth(angle) #改变绝对角度, 别名 turtle.setheading(angle)

相对(海龟)坐标

circle(r,extent=None) 以左侧为圆心,来个整圆,相当于第二个参数360度
turtle.circle(30, 180) 以左侧为圆心
turtle.forword(distance) 前进 distance 像素,可以为 负数, 别名 turtle.fd(distance)
turtle.back(distance) 后退 distance 像素,别名 turtle.bk(distance)
turtle.left(angle) 向左偏移 agnle 角度
turtle.right(d) 向右偏移 agnle 角度

turtle.circle

left / right

RGB 色彩模式

由三种颜色构成的万物色

  • RGB 指红蓝绿三个通道的颜色组合
  • 覆盖视力所能感知的所有颜色
  • RGB 每色取值范围 0-255 整数或 0-1 小数

turtle 的 RGB 色彩模式

turtle.colormode(mode) 默认采用小数值 可切换为整数值

  • 1.0:RGB 小数值模式
  • 255:RGB 整数值模式

turtle.pencolor(“purple”) 颜色字符串
turtle.pencolor(255, 215, 0) RGB 的整数值
turtle.pencolor((0.63,0.13,0.94)) RGB 的元组值

画笔控制函数

turtle.penup() 别名 turtle.pu()
抬起画笔,海龟在飞行

turtle.pendown() 别名 turtle.pd()
落下画笔,海龟在爬行

turtle.pensize(width) 别名 turtle.width(width)
画笔宽度,海龟的腰围

turtle.pencolor(color) color 为颜色字符串或 r,g,b 值
画笔颜色,海龟在涂装

案例

案例 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import turtle

turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(22)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
turtle.circle(40, 80)
turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2 / 3)
turtle.done()

案例 2:自动轨迹绘制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import turtle as t

t.title('自动轨迹绘制')
t.setup(800, 600)
t.pencolor("red")
t.pensize(5)
#数据读取
datals = []
f = open("data.txt")
for line in f:
line = line.replace("\n","")
# map 将第一个元素作用于第二个元素
datals.append(list(map(eval, line.split(","))))
f.close()
#自动绘制
for i in range(len(datals)):
t.pencolor(datals[i][3],datals[i][4],datals[i][5])
t.fd(datals[i][0])
if datals[i][1]:
t.rt(datals[i][2])
else:
t.lt(datals[i][2])