• 学习Python中turtle模块的基本用法(2:基本绘图函数测试)


      个人感觉turtle模块中的绘图函数是按人手拿着画笔一笔一画地画图的思路定义的,这与C#中的GDI+函数、html5中canvas的绘图函数及Tkinter中Canvas的绘图函数的定义思路存在差异,但也能完成后面绝大部分的绘图功能(目前看到的turtle文章及帮助文档里面还没有看到类似drawimage的函数)。
      本文介绍turtle模块中最常用的绘图函数,并结合参考文献测试绘图函数的使用方式。

    序号函数名说明
    1turtle.bgcolor设置窗体背景色
    2turtle.screensize设置窗体大小
    3turtle.penup提笔,笔抬起来之后后续就不会再绘图,turtle.pu、turtle.up与本函数作用相同
    4turtle.pendown落笔,笔落后后续就开始绘图,turtle.pd、turtle.down与本函数作用相同
    5turtle.pensize设置线宽,turtle.width与本函数作用相同
    6turtle.pencolor设置线条颜色
    7turtle.fillcolor设置区域填充颜色
    8turtle.begin_fill在绘制要填充的形状之前调用
    9turtle.end_fill以填充颜色填充前一begin_fill之后绘制的形状。自相交多边形或多个形状间的重叠区域是否填充取决于操作系统的图形引擎、重叠的类型以及重叠的层数
    10turtle.write绘制文本,可以指定对齐方式及字体信息,详见参考文献1
    11turtle.hideturtle隐藏绘图箭头或海龟(本人电脑上显示的是箭头),turtle.ht与本函数作用相同
    12turtle.showturtle显示绘图箭头或海龟 ,turtle.st与本函数作用相同
    13turtle.forward向前移动指定距离,penup时是移动,pendown时则是绘图,turtle.fd与本函数作用相同
    14turtle.backward向后移动指定距离,penup时是移动,pendown时则是绘图,turtle.back、turtle.bk与本函数作用相同
    15turtle.right向右侧转指定角度,之前调用过degrees函数则输入参数为度数,之前调用过radians则输入参数为弧度,turtle.rt与本函数作用相同
    16turtle.left向左侧转指定角度,之前调用过degrees函数则输入参数为度数,之前调用过radians则输入参数为弧度,turtle.lt与本函数作用相同
    17turtle.goto移动到指定坐标处,penup时是移动,pendown时则是绘图,turtle.setpos、turtle.setposition与本函数作用相同
    18turtle.speed设置海龟移动的速度为 0…10 表示的整型数值,速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。
    19turtle.position获取海龟当前坐标,turtle.pos与本函数作用相同
    20turtle.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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在这里插入图片描述
      第二个测试程序绘制的是从参考文献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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    在这里插入图片描述

    参考文献:
    [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

  • 相关阅读:
    用DOM来读取XML时要注意的一些概念
    EMQX 集群节点数据转发
    照片人像模糊怎么调?两分钟教会你
    php 时区查看和设置
    GitLab CI/CD之gitlab-ci.yml的介绍与简单编写(P3-P4)
    Linux使用find命令查找文件
    【第十七篇】商城系统-购物车功能设计
    2022年MySQL最新面试题
    We have awesome remote U.S. jobs waiting for engineers like you.
    【Python 实战基础】Pandas如何给股票数据新增年份和月份
  • 原文地址:https://blog.csdn.net/gc_2299/article/details/128068698