个人感觉turtle模块中的绘图函数是按人手拿着画笔一笔一画地画图的思路定义的,这与C#中的GDI+函数、html5中canvas的绘图函数及Tkinter中Canvas的绘图函数的定义思路存在差异,但也能完成后面绝大部分的绘图功能(目前看到的turtle文章及帮助文档里面还没有看到类似drawimage的函数)。
本文介绍turtle模块中最常用的绘图函数,并结合参考文献测试绘图函数的使用方式。
序号 | 函数名 | 说明 |
---|---|---|
1 | turtle.bgcolor | 设置窗体背景色 |
2 | turtle.screensize | 设置窗体大小 |
3 | turtle.penup | 提笔,笔抬起来之后后续就不会再绘图,turtle.pu、turtle.up与本函数作用相同 |
4 | turtle.pendown | 落笔,笔落后后续就开始绘图,turtle.pd、turtle.down与本函数作用相同 |
5 | turtle.pensize | 设置线宽,turtle.width与本函数作用相同 |
6 | turtle.pencolor | 设置线条颜色 |
7 | turtle.fillcolor | 设置区域填充颜色 |
8 | turtle.begin_fill | 在绘制要填充的形状之前调用 |
9 | turtle.end_fill | 以填充颜色填充前一begin_fill之后绘制的形状。自相交多边形或多个形状间的重叠区域是否填充取决于操作系统的图形引擎、重叠的类型以及重叠的层数 |
10 | turtle.write | 绘制文本,可以指定对齐方式及字体信息,详见参考文献1 |
11 | turtle.hideturtle | 隐藏绘图箭头或海龟(本人电脑上显示的是箭头),turtle.ht与本函数作用相同 |
12 | turtle.showturtle | 显示绘图箭头或海龟 ,turtle.st与本函数作用相同 |
13 | turtle.forward | 向前移动指定距离,penup时是移动,pendown时则是绘图,turtle.fd与本函数作用相同 |
14 | turtle.backward | 向后移动指定距离,penup时是移动,pendown时则是绘图,turtle.back、turtle.bk与本函数作用相同 |
15 | turtle.right | 向右侧转指定角度,之前调用过degrees函数则输入参数为度数,之前调用过radians则输入参数为弧度,turtle.rt与本函数作用相同 |
16 | turtle.left | 向左侧转指定角度,之前调用过degrees函数则输入参数为度数,之前调用过radians则输入参数为弧度,turtle.lt与本函数作用相同 |
17 | turtle.goto | 移动到指定坐标处,penup时是移动,pendown时则是绘图,turtle.setpos、turtle.setposition与本函数作用相同 |
18 | turtle.speed | 设置海龟移动的速度为 0…10 表示的整型数值,速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。 |
19 | turtle.position | 获取海龟当前坐标,turtle.pos与本函数作用相同 |
20 | turtle.circle | 绘制圆形,圆心在海龟左边 radius 个单位 |
基于上述函数,结合参考文献进行绘图功能测试。首先测试绘制五星红旗,原始代码来自参考文献2,其绘制了红旗和旗杆,本文测试时去掉了绘制旗杆的代码,并对绘制红旗的代码进行了优化,优化后的代码及运行效果如下所示:
import turtle
def DawStar(startX,startY,lens):
turtle.penup()
turtle.goto(startX,startY)
turtle.pendown()
turtle.fillcolor("yellow")
turtle.pencolor("yellow")
turtle.begin_fill()
for i in range(1,6):
turtle.forward(lens)
turtle.right(144)
turtle.end_fill()
turtle.pencolor("red")
turtle.fillcolor("red")
turtle.begin_fill()
turtle.penup()
turtle.goto(-60,0)
turtle.pendown()
turtle.goto(-60,160)
turtle.goto(240,160)
turtle.goto(240,0)
turtle.goto(-60,0)
turtle.end_fill()
DawStar(-50,110,45)
DawStar(-10,145,20)
DawStar(10,120,20)
DawStar(10,95,20)
DawStar(-10,70,20)
turtle.hideturtle()
第二个测试程序绘制的是从参考文献3中找到的简单的盘类零件主视图(原始图如下图所示),主要是由多个圆组成,绘图代码及运行效果如下所示(暂时不清楚虚线怎么画,绘图时全都画成了实线):
import turtle
def DrawCircle(startX,startY,width,radius):
turtle.penup()
turtle.goto(startX,startY)
turtle.pensize(width)
turtle.pendown()
turtle.right(90)
turtle.circle(radius)
turtle.left(90)
turtle.pensize(1)
turtle.penup()
turtle.backward(130)
turtle.pendown()
turtle.forward(260)
turtle.penup()
turtle.goto(0,130)
turtle.pendown()
turtle.goto(0,-130)
turtle.penup()
turtle.goto(0,0)
DrawCircle(-50,0,3,50)
DrawCircle(-60,0,3,60)
DrawCircle(-70,0,3,70)
DrawCircle(-90,0,1,90)
DrawCircle(-110,0,3,110)
DrawCircle(-100,0,3,10)
DrawCircle(-10,-90,3,10)
DrawCircle(80,0,3,10)
DrawCircle(-10,90,3,10)
turtle.hideturtle()
参考文献:
[1]https://docs.python.org/zh-cn/3/library/turtle.html
[2]https://blog.csdn.net/A15622180434/article/details/122700075
[3]https://max.book118.com/html/2016/0803/50160473.shtm