Python--turtle库
这里在对python的turtle由一定的了解的前提下,对turtle库的函数做一个具体的解释,并给出几个例子,可以更好的理解海龟绘图体系。
命令 | 说明 |
画笔运动命令 | |
turtle.forward(distance) |
向当前画笔方向移动distance像素长度 |
turtle.backward(distance) |
向当前画笔相反方向移动distance像素长度 |
turtle.right(degree) | 顺时针移动degree° |
turtle.left(degree) | 逆时针移动degree° |
turtle.pendown() | 移动时绘制图形,缺省时也为绘制 |
dot(r) |
绘制一个指定直径和颜色的圆点 |
home() |
设置当前画笔位置为原点,朝向东。 |
setheading(angle) |
设置当前朝向为angle角度 |
sety( ) |
将当前y轴移动到指定位置 |
setx( ) |
将当前x轴移动到指定位置 |
turtle.circle() |
画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 |
turtle.penup() |
提起笔移动,不绘制图形,用于另起一个地方绘制 |
turtle.goto(x,y) |
将画笔移动到坐标为x,y的位置 |
画笔控制命令 | |
turtle.fillcolor(colorstring) |
绘制图形的填充颜色 |
turtle.color(color1, color2) |
同时设置pencolor=color1, fillcolor=color2 |
turtle.showturtle() |
显示画笔的turtle形状 |
turtle.hideturtle() |
隐藏画笔的turtle形状 |
turtle.filling() |
返回当前是否在填充状态 |
turtle.begin_fill() |
准备开始填充图形 |
turtle.end_fill() |
填充完成 |
全局控制命令 | |
turtle.write(s [,font=("font-name",font_size,"font_type")]) |
写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项 |
turtle.clear() |
清空turtle窗口,但是turtle的位置和状态不会改变 |
turtle.reset() |
清空窗口,重置turtle状态为起始状态 |
turtle.undo() |
撤销上一个turtle动作 |
turtle.isvisible() |
返回当前turtle是否可见 |
stamp() |
复制当前图形 |
其他 | |
turtle.delay(delay=None) |
设置或返回以毫秒为单位的绘图延迟。 |
turtle.begin_poly() |
开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。 |
turtle.end_poly() |
停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。 |
turtle.get_poly() |
返回最后记录的多边形。 |
实例(1):蟒蛇的绘制
import turtle
# or from <库名> import <函数名> or from <库名> import*
# import <库名> as <库别名> <库别名>. <函数>
turtle.setup(650, 350, 200, 200) # 绘图窗口width, height, startx, starty 单位: 像素
turtle.penup() # (1)画笔控制函数,不在画布上形成图案
turtle.fd(-250) # 前; bk后
turtle.pendown() # (2)
turtle.pensize(25) # 画笔宽度,海龟得腰围 or turtle.width
# turtle.colormode(mode) mode = 1.0RGB小数模式; mode = 255RGB整数模式
turtle.pencolor("tomato") # 字符串,RGB小数值,元组值=(小数值/整数值)
turtle.seth(-40) # 改变行进方向,绝对角度;left(angle) or right(angle),海龟角度
for i in range(4): # range(n) 产生循环计数序列,由0到n-1;range(m, n)
turtle.circle(40, 80) # 旋转(r,extent)根据半径r(圆心在海龟左侧)绘制extent角度得弧度
turtle.circle(-40, 80)
turtle.circle(40, 80 / 2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2 / 3)
turtle.done() # 停滞窗口
实例(2):数码管日期的绘制(取决于运行时的日期)
import turtle as t
import time
def drawgap(): #绘制数码管间隙
t.penup()
t.fd(5)
def drawline(draw): #绘制单段数码管
drawgap()
t.pendown() if draw else t.penup()
t.fd(40)
drawgap()
t.right(90)
def drawdigit(digit): #绘制七段数码管
drawline(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawline(False)
drawline(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawline(False)
drawline(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawline(False)
drawline(True) if digit in [0, 2, 6, 8] else drawline(False)
t.left(90)
drawline(True) if digit in [0, 4, 5, 6, 8, 9] else drawline(False)
drawline(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawline(False)
drawline(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawline(False)
t.left(180)
t.penup()
t.fd(20)
def drawDate(date):
number = 0
for i in date:
if number <= 3:
t.pencolor('red')
elif number <= 5:
t.pencolor('green')
else:
t.pencolor('blue')
drawdigit(eval(i))
if number == 3 or number == 5:
t.pencolor('purple')
t.penup()
t.fd(10)
t.pendown()
t.circle(2)
t.penup()
t.fd(30)
t.pendown()
number += 1
def main():
t.setup(800, 350, 200, 200)
t.penup()
t.fd(-300)
t.pensize(5)
drawDate(time.strftime("%Y%m%d", time.gmtime()))
t.hideturtle()
t.done()
main()