精华内容
下载资源
问答
  • turtle设置初始位置
    千次阅读
    2020-11-29 14:12:29

    在用turtle绘画时,画笔的第一笔落笔点默认是在画布中心,画笔朝东(向右),但是有时需要绘制一些不对称的图,画笔落在画布中心会使结果偏离中心或画出画布。所以需要移动画笔的初始落笔点。

    这里有两个方法:

    goto()函数

    turtle.goto(x,y)

    turtle规定以中心为原点(0,0),而turtle.goto(x,y)表示将原点向右移动x个像素,向上移动y个像素。

    其中,x,y可以为负数。

    提笔移动

    turtle函数绘画时,有两个基本动作,提笔和落笔。提笔时,只移动画笔,但不会留下痕迹;而落笔则会画出痕迹。

    如下的代码:

    将画笔向下移动100个像素:

    首先,因为画笔初始向右,turtle.left(90)为将笔端向左旋转90度,此时向上;

    turtle.up()为提笔,即之后的动作只会移动笔端,而不会画出痕迹;

    turtle.backward(100)为向后移动100像素,即向下移动100像素;

    turtle.down()为落笔,即之后的动作会留下痕迹;

    turtle.right(90)为将笔端向右旋转90度,即又恢复成向右,即从此开始才开始落笔绘画。

    turtle.left(90)

    turtle.up()

    turtle.backward(100)

    turtle.down()

    turtle.right(90)

    上述的是一种方法,上面的效果还有很多种操作,所以,要向移动笔端,则提笔空画即可。

    turtle函数的详细用法

    在lib目录下有一个turtle.py文件,这就是turtle的安装目录。官方文档:https://docs.python.org/3/library/turtle.html

    turtle库画笔状态控制函数

    函数

    描述

    penup()

    提起画笔,与pendown()配对使用

    pendwon()

    放下画笔

    pensize(width)

    设置画笔线条的粗细为指定大小

    turtle库的画笔运动的函数

    函数

    描述

    forward()

    沿着当前方向前进指定距离

    backward()

    沿着当前相反方向后退指定距离

    right(angle)

    向右旋转angle角度

    left(angle)

    向左旋转angle角度

    goto(x, y)

    移动到绝对坐标(x, y)处

    setx()

    将当前x轴移动到指定位置

    sety()

    将当前y轴移动到指定位置

    setheading(angle)

    设置当前朝向为angle的角度

    home()

    设置当前画笔位置为原点,朝向东

    circle(step)

    绘制一个指定半径、角度以及绘制步骤step的圆

    dot(r, color)

    绘制一个指定半径r和颜色color的圆点

    undo()

    撤销画笔最后一步动作

    speed()

    设置的绘制速度,参数为0 - 10之间

    turtle库的控制画笔和字体函数

    函数

    描述

    color()

    设置画笔的颜色

    begin_fill()

    填充图形前,调用该方法

    end_fill()

    填充图形结束

    filling()

    返回填充的状态,True为填充,False为未填充

    clear()

    清空当前窗口,但不改变当前画笔的位置

    reset()

    清空当前窗口,并重置位置状态为默认值

    screensize()

    设置画面的长和宽

    hideturtle()

    隐藏画笔的turtle形状

    showturtle()

    显示画笔的turtle形状

    isvisible()

    如果turtle可见,则返回Ture

    write(str, font = None)

    输出font字体的字符串

    更多相关内容
  • 交流学习python编程技术及行业动态,点击上方“蓝字”关注我们Python绘图篇——Turtle库详解(一)写在前面 ↓注:本教程基于64位windows系统(鼠标右键点击桌面“此电脑”图标——属性可查看电脑系统版本)、python3.x...

    交流学习python编程技术及行业动态,点击上方“蓝字”关注我们

    6171fc0eaa07693b62c1d4e0fb84ebef.png

    Python绘图篇——Turtle库详解(一)

    写在前面 ↓

    注:本教程基于64位windows系统(鼠标右键点击桌面“此电脑”图标——属性可查看电脑系统版本)、python3.x(pycharm自动安装的版本, 3.0以上)。

    文中代码内容所使用的工具是pycharm-community-2019.3.3,实践中如有碰到问题,可留言提问。

    dc8514600d2514a73b3694142902c941.gif

    Turtle基本介绍

    01

    91b31747a2aa99446678b9b9d5241acc.png

    Turtle库是Python语言中一个很流行的绘制图像的函数库,turtle中文意思是海龟,也就是我们把画画,想象成一只海龟爬行的路线。Turtle库运用数学中坐标系的概念,在一个横轴为x、纵轴为y的坐标系原点,也就是(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

    本篇仅为列出完整turtle库概念及大框架内容,详细讲解及案例展示的部分,小编会在后续的系列文章中继续放出。

    先行总结一下:python绘图很简单,记住几个单词,小孩子也可以上手。

    放一张幻想编程岛海龟绘图的效果截图吧~

    fab7412912cf6863253849540e86b0ce.png dc8514600d2514a73b3694142902c941.gif

    Turtle基础知识

    02

    5d8057d0f3f1df10e7fa190cbd807ba6.png

    1. 画布(canvas)

            画布就是turtle为我们展开用于绘图的区域,且turtle所有的绘图操作,全部基于画布发生。

            设置画布大小可以使用screensize()函数完成,参数分别为画布的宽(单位像素), 高, 背景颜色。(写法见下图)

            如:turtle.screensize(800,600, "green")

                  turtle.screensize() #返回默认大小(400, 300)

            turtle.setup()函数,参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。(写法见下图)

    469bc254460b624121c22472ba0159c7.png

    2. 画笔:

    2.1 画笔的状态

            在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

    2.2 画笔的属性

            画笔(画笔的属性,颜色、画线的宽度等)

            1) turtle.pensize():设置画笔的宽度;

            2) turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是RGB 3元组。

           3) turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

    2.3 绘图命令

             操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

    (1)    画笔运动命令:

    1f9a5140856490af080bc6472af96909.png 320451888ecf0d63c75d480aaf85dfc9.png

    画笔运动命令可以控制画笔在画布上绘制出自己想要的图案,比如下图,小的黑色三角形箭头即为画笔,也就是turtle库的“海龟”。

    8e1e0cd71a78f16fca5e4aaf463b7037.gif

    (2)     画笔控制命令:

    243363c19815b2db03b94a306c8671f9.png

    (3)    全局控制命令:

    7ff1d4be37f83354c4593355b5b75a58.png

    (4)    其他命令:

    a8a7bcf29148bba2e38bec70623469e3.png

    3. 命令详解

    3.1 turtle.circle(radius, extent = None, steps = None)

            描述:以给定半径画圆

            参数:

            radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;

            extent(弧度) (optional);

            steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)。

    举例:

    circle(50) # 整圆;

    circle(50,steps=3) # 三角形;

    circle(120, 180) # 半圆

    dc8514600d2514a73b3694142902c941.gif

    幻想编程岛

    52900f56a9487543c9698c5af5a2da63.png

    作为长期带领孩子学习编程入门的机构,幻想编程岛深知如何让你爱上编程,不仅是孩子,只要有编程学习的需要,大人也同样可以使用,因此幻想编程岛中的课程运用了易懂的可视化模块操作和完整的故事情节,提供了游戏互动课堂的可能。

    在编程普及的时代中,我们不能要求任何一个孩子或大人变成真正意义上的软件工程师,但也不能让他对这个领域一无所知。如果你感兴趣,来扫一扫下方二维码关注我们,就可以免费申请个账号玩一场游戏试试看,如果你不感兴趣,也欢迎和我们分享编程相关的技术动态。

    欢迎来到幻想编程岛数码世界,我们希望的是,会玩就会学!扫码关注我们,获取更多精彩内容!

    eeefc69cc83cabe4af3411db58e13af1.png
    展开全文
  • Turtle模块绝对是吸引非专业代码开发者人员学习python入门的好工具,通过turtle几行代码的执行软件就会画出漂亮的图形,美观而且有成就感,这样一下子对python编程就产生了兴趣。这些漂亮的图形如三角形、五角星、...

    821dbd819bc2a2d53494f96056a88999.png

    Turtle模块绝对是吸引非专业代码开发者人员学习python入门的好工具,通过turtle几行代码的执行软件就会画出漂亮的图形,美观而且有成就感,这样一下子对python编程就产生了兴趣。这些漂亮的图形如三角形、五角星、机器猫等。在写代码的时候改变几个参数,就可以产生新的奇形怪状,小朋友们遇到这样的情形绝对会向家长或者老师炫耀。下面我就以玩转Turtle为题进入本篇的介绍。

    什么是Turtle?

    Turtle英译过来为乌龟,不过我们介绍的不是这种动物,而是以此命名的一个绘图软件。在python文档中介绍了Turtle本身是一款简单、易上手的绘图软件,非常适合带领孩子们进入编程的世界。该软件由Wally Feurzeig, Seymour Papert and Cynthia Solomon等在1967年使用最原始的Logo编程语言开发而成。python语言出现后,有开发者使用python对其进行了重写,变成了Python内置的一个模块。随着python语言的大热,Turtle模块也成为了python语言简单好用的一个代名词,或者说一个很好的宣讲案例。在Python中,使用turtle模块的几行代码、改变几个参数就能绘出漂亮的图形,如果再增加一些参数,还能绘制出如笑脸、哆啦A梦、表情包等创意十足的图像,令人惊叹。在学着绘图时,就会逐步学习python的一些基本语法、函数、模块、类和对象等基础知识;边玩边学四字成语非常恰当的描述了玩转turtle模块的境界,也非常适宜于少儿或者初学者进入Python的世界。

    如何玩Turtle?

    当然在这里需要进入python编程环境,可以直接使用IDLE新建一个python文件,命名为turtle1.py。然后在这个python文件中就可以开始动手写有关turtle的代码。

    Turtle是python安装时自带的内置模块,调用该模块非常简单,直接使用import方式加载:

    import turtle

    这也是程序的第一行代码,用于准备好使用turtle这个模块。

    (1)基本动作和转向

    然后就可以开始学步了。首先从走开始,让乌龟往前走100步,就在第一行代码结束后在第二行代码处写入:

    turtle.forward(100)

    这里forward就是往前走的方法,括号里的100为设定的步伐参数。

    此时如果运行该程序,就可以看到一张画布弹出来,该画布左上角有Python Turtle Graphics标题和LOGO,在画布的中部黑三角箭头正按照较快的速度往前挪,很快到达100步那个位置。前进的过程就像一支黑色的笔在画布上按照设定方式在画画,笔头安装了一个黑色箭头用于指示方向,非常生动有趣。如下图:

    18e7ba75e7086b0b9304266d0632076e.png

    而此时代码看起来是这样的:

    8a0f634d73dc33a206f8307217aef46f.png

    如果想往前走300步,直接修改那个100为新的300即可。

    即对于forward(参数)方法,括号里的参数是可以修改的,这在python程序里forward就是一个公用函数,其中的参数为变量,即值可以改变的参数。控制了这个参数,就可以控制前进的距离。

    如果想回撤,那么就可以使用乌龟的backward方法。如在上述代码第三行加入回撤50步的代码,如下:

    import turtle
    turtle.forward(100)
    turtle.backward(50)

    保存新的文件同时运行,可以看到画布上画笔的黑三角箭头保持方向不变,但倒着往回50步。如图:

    4025a73239b2a63bfc8425eec9e1bb57.png

    上述forward和backward就是前进和后退的方法,两种方法都有括号,在括号里可以设定前进或后退的步伐(这里一步为画布上的一个像素点)。

    只有前进和后退显然有点单调,我们需要还可以转弯。此时就需要使用turtle的转向方法,左转为left,右转为right,如下我们在前述代码基础上增加左转方法,并设定角度为90度,然后继续往前100步。

    import turtle
    turtle.forward(100)
    turtle.backward(50)
    turtle.left(90)
    turtle.forward(100)

    运行程序后,画布上画笔先是笔头左转了90度方向,变成了向上,然后沿着向上的方法画出了长度为100像素的一条线,此时图形变成了一个倒丁字形状:

    53845cbd030cc90a1cb6e291fd870b28.png

    上述代码中left方法与forward方法一样,括号里的参数也可以随意设定,比如将left方法里的90度修改为45度:

    import turtle
    turtle.forward(100)
    turtle.backward(50)
    turtle.left(45)
    turtle.forward(100)

    再运行程序,此时图形就变为一个钝角形状:

    74756f4a0f87127e78abf592e01b5899.png

    由此看来,改变left方法里的角度参数,画笔就可以绘制出不同形状的图形。

    与左转left方法使用方法一致,右转right方法用于向右转,其中right(角度)中的角度参数也可以根据需要来设置。例如在上述左转前行的基础上,设定右转90度,然后前行100步:

    import turtle
    turtle.forward(100)
    turtle.backward(50)
    turtle.left(45)
    turtle.forward(100)
    turtle.right(90)
    turtle.forward(100)

    运行代码时,绘制图形效果如下:

    d2eafbd6632caf221f6061d28ae339ec.png

    接下来可以思考一下,如果在上述基础上将右侧下部开口的三角形状进行封闭,也就是形成一个完整的三角形呢?

    很显然,此时需要动脑筋稍微计算一下。首先箭头需要右转135度,然后再前行100步:

    import turtle
    turtle.forward(100)
    turtle.backward(50)
    turtle.left(45)
    turtle.forward(100)
    turtle.right(90)
    turtle.forward(100)
    turtle.right(135)
    turtle.forward(100)

    再次运行程序,画笔先在原有位置顺时针方向旋转135度,笔头方向正好朝西,然后开始画一个长为100像素的直线,就得到一个右侧封闭的三角形,如下:

    13581a2fe36ae55c55bfac574361f513.png

    到这里我们小结一下,使用turtle绘图的基本动作方法包括:forward(前进参数)、backward(后退参数)、left(左转角度)、right(右转角度)。turtle是乌龟绘图模块名,该模块中内置了这些动作方法,因此在使用的时候直接调用并给定相应参数即可。简单理解,turtle就是那支画笔,这些基本动作方法就用于控制画笔的画画方式。用python的面向对象概念来理解,这些方法属于turtle这个绘图对象,调用时使用了“.”运算符,其格式为turtle.方法名(参数)。turtle这个绘图对象还有很多类似方法,使用格式均为turtle.方法名(参数)。

    (2)设置画布和画笔颜色

    试想我们是否可以设置一下画布和画笔的颜色呢?肯定是可以的,调用画笔的bgcolor方法就可以设置画布背景颜色,格式为:turtle.bgcolor(颜色参数);调用其color方法就可以设置画笔颜色,格式为turtle.color(颜色参数)。这里的颜色参数直接给常见的颜色,如red、white、yellow、purple,使用的时候加单引号;也可以给RGB颜色代码,如255,255,255为白色,0,0,0为黑色。需要说明的是,设置画布背景颜色一般会放置在程序开始部分,而画笔颜色可以在需要的地方设置即可。如将上述绘制三角形的代码修改一下,增加画布背景和画笔颜色:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    turtle.forward(100)
    turtle.backward(50)
    turtle.left(45)
    turtle.color('white')
    turtle.forward(100)
    turtle.right(90)
    turtle.forward(100)
    turtle.color('red')
    turtle.right(135)
    turtle.forward(100)

    运行代码,此时画布变为了黑色,画笔先为黄色,然后为白色,最后为红色,效果如下:

    ce5e786487192f8de2f638825608bd4a.png

    上面我们通过控制turtle画笔的动作和转向角度,画出了一个三角形。想想心里是不是已经有了小小的成就感了?看来用turtle软件画画还是比较简单的。

    (3)for循环语句控制重复动作

    下面我们来在画布上画一个正方形。如何设计呢?首先来分析一下,我们知道正方形每条边长度相同,边与边的夹角为90度。因此可以先往前移动一个距离d,然后左转90度,转向后继续往前移动距离d,再左转90度,继续移动距离d,再来一次左转90度,移动距离d,这样起点和终点就重合了,也就画出了一个完整的正方形。我们来看代码:

    import 

    执行后,画笔就在画布上画出了一个正方形:

    cb037c4d7a2db7c4f3ecee787fdc8713.png

    仔细观察代码,可以发现如果把turtle.forward(100)、turtle.left(90)这两行语句作为一个动作组合的话,整个代码中一共重复了四次,这种重复动作写在代码中还是有点冗长的,试想如果重复100次这个组合动作,那就得将这个组合动作代码重复编写100次,这样做肯定不科学。如何简化这种重复执行动作组合呢?python中提供了控制循环的for语句,专门用于解决这类重复性问题。我们先来修改一下画正方形的代码:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    totalTimes=4                       #设定一共需要重复的次数
    for times in range(totalTimes):    #使用for语句对每一次进行设计相同的动作组合
        turtle.forward(100)            #设定前移100个像素点
        turtle.left(90)                #然后左转90度

    执行后效果与上述图是一样的。这里代码就简化多了,代码中for语句就用于设计循环语句,其使用方法为:

    for times in range(totalTimes): 
        #这里写需要重复的代码块。

    上述画四边形时,相同动作组合重复了4次,动作组合中转向角度为90度,两个数字相乘正好为360度,从角度来说就是从起始点出发旋转一周回到原点,也恰好构成一个封闭的图形。如果还想画一个封闭的五边形,就可以设计动作组合中转向角度为72度,重复次数为5次;如果画一个封闭的六边形,设计转向角度为60度,重复次数为6次即可。如下设计在画布上先画五边形,然后画六边形的代码:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    #先画6边形
    totalTimes=6
    for times in range(totalTimes):
        turtle.forward(100)
        turtle.left(60)
    
    #然后左转向150度,并往前移动50个像素点
    turtle.left(150)
    turtle.forward(50)
    
    #最后画5边形
    totalTimes=5
    for times in range(totalTimes):
        turtle.forward(100)
        turtle.left(72)

    执行上述代码,在画布上画出的效果是这样的:

    aab4f5662240dabcab93b23ffdc6ce35.png

    这样是不是就可以画一个圆呢?只要将画笔移动的距离设置短一些,如设置为2,转向设置也为2,那重复次数就必须设置为180,由此就可以画出一个妥妥的圆了。代码如下:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    #画圆
    totalTimes=180
    for times in range(totalTimes):
        turtle.forward(2)
        turtle.left(2)

    执行后效果如下:

    4c8a6902e805be07d01902637599503f.png

    不过在turtle软件中已经内置好了画圆的方法,就是使用turtle.circle(半径参数),给定半径参数就能完成圆的绘制。如下代码:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    #画一个半径为100的圆
    turtle.circle(100)     

    (4)设置坐标和画笔位置

    到现在为止,我们已经掌握了画基本图形的方法。不过仔细观察的话也可以发现每次画画时画笔总是从画布的中心出发,因为这是turtle模块设置好了的,默认从中心点出发。如果使用二维坐标来表示的话,画布的中心位置坐标为(0,0),即纵横坐标均为0。我们也可以使用turtle模块的setpos方法修改其位置,如turtle.setpos(10,10)就是设置画笔纵坐标为10,横坐标也为10;如若设置为turtle.setpos(10,10),就是设置画笔横坐标为10,也就是中心点往右10个像素点,然后再往上10个像素点。如果用数学角度来说明的话,新的起始点就在中心点右偏上45度,距离为d=(10*10+10*10)的平方根。

    我们来试一下:

    import 

    运行程序后,画笔先从中心位置挪到指定位置(10,10),然后开始画圆,效果图如下:

    e6d016131b3978956353324bede4f63e.png

    这个圆画的不漂亮,起始点貌似有个尾巴,这是画笔最开始从中心位置挪到设定位置时画笔移动的痕迹。如何去除这个痕迹呢?我们可以这样做:使用turtle提供的提笔方法penup( ),也就是先从中心点将画笔提起来,画笔在空中挪至设定位置,然后到了设定位置再将画笔落到画布上,此时就使用落笔方法turtle.pendown( ),这样我们修改上述代码如下:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    #提起画笔
    turtle.penup()
    #设置画笔的位置挪到纵横坐标均为10像素的位置,即中心点往右45度方向
    turtle.setpos(10,10)
    #落下画笔
    turtle.pendown()
    #开始画圆,画一个半径为100像素的圆
    turtle.circle(30)

    再来执行代码,那个多余的尾巴就没有了。同时如果想画图结束时那个画笔不显示,可以使用hideturtle方法,即隐藏画笔。由此可以得到启发,使用提笔落笔的方法我们就可以在同一个画布上画出很多图形,当然前提是需要计算好位置。由此设计的时候可以先用笔参考如下坐标图给定位置:

    38c3e7612d3369929e046ba690328b0b.png

    例如我们来画个笑脸试试。

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    
    #先画笑脸轮廓,画一个半径为100像素的圆
    turtle.circle(100)
    
    #提笔到左上角(-40,120)位置,画一个小圆,表示右眼
    turtle.penup()
    turtle.setpos(-40,120)
    turtle.pendown()
    turtle.circle(10)
    
    #提笔到中部位置,先画一条短线表示上嘴唇
    turtle.penup()
    turtle.setpos(-10,60)
    turtle.pendown()
    turtle.forward(20)
    #继续下移一定距离,画一条短弧线表示下嘴唇
    turtle.penup()
    turtle.setpos(-10,40)
    turtle.pendown()
    totalTimes=4
    for times in range(totalTimes):
        turtle.forward(5)
        turtle.left(10)
    
    #提笔到右上角(40,120)位置,画一个小圆,表示右眼
    turtle.penup()
    turtle.setpos(40,120)
    turtle.pendown()
    turtle.circle(10)
    #隐藏那个画笔箭头
    turtle.hideturtle()

    运行效果如下图:

    6feea17d617b6234e65402fe21e77122.png

    实话实说美观程度一般,不过至少画出了一个小人的脸,好像不咋笑。我们使用了turtle.penup()方法,就是提笔,而turtle模块中本身就自带了pen方法,也就是画笔方法,可以通过pen方法来设置画笔的尺寸、颜色,也可以直接使用pencolor、pensize等方法。具体使用格式为:

    turtle.pen(pensize=10,pencolor='red',fillcolor='yellow')

    或者直接设定:

    turtle.pencolor('red')
    turtle.pensize(10)

    如果需要填充颜色,就需要使用turtle的beginfill()和end_fill() 组合,格式为:

    turtle.fillcolor("yellow")
    turtle.begin_fill()
    turtle.circle(100)
    turtle.end_fill()

    我们将这些颜色的设定加入之前画的那个笑脸代码中:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    
    #先画笑脸轮廓,画一个半径为100像素的圆
    turtle.fillcolor("yellow")
    turtle.begin_fill()
    turtle.circle(100)
    turtle.end_fill()
    
    #提笔到左上角(-40,120)位置,画一个小圆,表示右眼
    turtle.pen(pensize=10,pencolor='red',fillcolor='yellow')
    turtle.penup()
    turtle.setpos(-40,120)
    turtle.pendown()
    turtle.circle(10)
    
    #提笔到中部位置,先画一条短线表示上嘴唇
    turtle.penup()
    turtle.setpos(-10,60)
    turtle.pendown()
    turtle.forward(20)
    #继续下移一定距离,画一条短弧线表示下嘴唇
    turtle.penup()
    turtle.setpos(-10,40)
    turtle.pendown()
    totalTimes=4
    for times in range(totalTimes):
        turtle.forward(5)
        turtle.left(10)
    
    #提笔到右上角(40,120)位置,画一个小圆,表示右眼
    turtle.pen(pensize=10,pencolor='red',fillcolor='yellow')
    turtle.penup()
    turtle.setpos(40,120)
    turtle.pendown()
    turtle.circle(10)
    #隐藏那个画笔箭头
    turtle.hideturtle()

    再运行代码,就得到效果图如下:

    fb7a72d51f792d881844f26443f15a9d.png

    我们来画一个小车,在画的时候先需要在纸上稍微设计一下车的基本结构参数,如长度和高度等等。示例代码如下:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    
    #先画后轮子
    turtle.fillcolor("yellow")
    turtle.begin_fill()
    turtle.circle(20)
    turtle.end_fill()
    #提笔往前挪,画前轮
    turtle.penup()
    turtle.forward(200)
    turtle.pendown()
    turtle.begin_fill()
    turtle.circle(20)
    turtle.end_fill()
    #画车轮廓
    turtle.left(90)
    turtle.forward(50)
    turtle.right(90)
    turtle.forward(70)
    turtle.left(135)
    turtle.forward(60)
    turtle.right(45)
    turtle.forward(2)
    turtle.left(90)
    turtle.forward(70)
    turtle.right(90)
    turtle.forward(20)
    turtle.left(90)
    turtle.forward(160)
    turtle.left(50)
    turtle.forward(60)
    turtle.left(40)
    turtle.forward(18)
    turtle.left(90)
    turtle.forward(240)
    #画后轮与车轮廓接触线
    turtle.penup()
    turtle.home()
    turtle.pendown()
    turtle.left(90)
    turtle.forward(50)
    turtle.write("this car is made by Mr.cao,2019")
    
    #车上方写标题
    turtle.penup()
    turtle.setpos(60,140)
    turtle.pendown()
    turtle.write("豪车!",font=("Times", 18, "bold"))
    
    #隐藏那个画笔箭头
    turtle.hideturtle()

    运行效果如图:

    30d853a837ac87f7561fdb5c3283e2c7.png

    (5)使用函数

    还想画别的吗?只要有足够的想象力,大部分的图都可以使用这个turtle来实现。那我们在画的过程中每完成一个图形,是否可以将这个画图形的过程包装起来给个名字,如果想画这个图形,直接调用它的名字就可以呢。肯定是可以的,而且还非常方便。python中的函数就是用来做这个事情的,其基本格式为:

    def 函数名称(参数):
        #执行代码

    如果以画画为例,函数名称就可以命名为画图形名称,这里的参数是可选项,在画画过程中如果想采用不同颜色的笔,就可以将笔的颜色作为一个参数变量,每次使用这个函数时给定笔的颜色参数,就可以按照自己喜欢的颜色画画了。也可以将别的可以变化的参数作为变量参数来设定。执行代码处就是代码块,用于完成整个图形绘制的过程。举个栗子,我们将前面画四边形、五边形、六边形等可以包装成一个函数,名称取为drawShape,参数包括两个,一个是totalTimes,总的边数,一个是distance,就是画画长度,代码如下:

    def drawShape(totalTimes,distance):         
        for time in range(totalTimes):
            turtle.forward(distance)
            turtle.left(360/totalTimes)

    这样我们想画这种类似形状的时候,只需要调用这个函数名,给定两个参数的值,就可以了。例如:

    import turtle
    turtle.bgcolor('black')
    turtle.color('yellow')
    #编写一个函数drawShape,用于画多边形
    def drawShape(totalTimes,distance):         
        for time in range(totalTimes):
            turtle.forward(distance)
            turtle.left(360/totalTimes)
            
    #调用这个函数,来画一个五边形,每边长度为80个像素
    drawShape(5,80)

    (6)turtle时钟和事件响应

    在turtle中还有动作触发响应事件,也就是通过鼠标或键盘来控制画画开始或结束,还可以设置时钟,这样我们就可以画点动画了,当然是较为简单的。例如我们将上述画笑脸和画车两个作品放在一个文件里,先画笑脸,等待2秒后,再画出车来,代码参考如下:

    import turtle
    turtle.bgcolor('black')
    #定义一个画车的函数
    def drawCar():
        turtle.color('yellow')
        #先画后轮子
        turtle.fillcolor("yellow")
        turtle.begin_fill()
        turtle.circle(20)
        turtle.end_fill()
        #提笔往前挪,画前轮
        turtle.penup()
        turtle.forward(200)
        turtle.pendown()
        turtle.begin_fill()
        turtle.circle(20)
        turtle.end_fill()
        #画车轮廓
        turtle.left(90)
        turtle.forward(50)
        turtle.right(90)
        turtle.forward(70)
        turtle.left(135)
        turtle.forward(60)
        turtle.right(45)
        turtle.forward(2)
        turtle.left(90)
        turtle.forward(70)
        turtle.right(90)
        turtle.forward(20)
        turtle.left(90)
        turtle.forward(160)
        turtle.left(50)
        turtle.forward(60)
        turtle.left(40)
        turtle.forward(18)
        turtle.left(90)
        turtle.forward(240)
        #画后轮与车轮廓接触线
        turtle.penup()
        turtle.home()
        turtle.pendown()
        turtle.left(90)
        turtle.forward(50)
        turtle.write("this car is made by Mr.cao,2019")
    
        #车上方写标题
        turtle.penup()
        turtle.setpos(60,140)
        turtle.pendown()
        turtle.write("豪车!",font=("Times", 22, "bold"))
    
        #隐藏那个画笔箭头
        turtle.hideturtle()
    
    #定义个画笑脸的函数
    def drawFace():
        turtle.color('yellow')    
        turtle.speed(0.1)
        #先画笑脸轮廓,画一个半径为100像素的圆
        turtle.circle(100)
        #提笔到左上角(-40,120)位置,画一个小圆,表示右眼
        turtle.penup()
        turtle.setpos(-40,120)
        turtle.pendown()
        turtle.circle(10)
        #提笔到中部位置,先画一条短线表示上嘴唇
        turtle.penup()
        turtle.setpos(-10,60)
        turtle.pendown()
        turtle.forward(20)
        #继续下移一定距离,画一条短弧线表示下嘴唇
        turtle.penup()
        turtle.setpos(-10,40)
        turtle.pendown()
        totalTimes=4
        for times in range(totalTimes):
            turtle.forward(5)
            turtle.left(10)
    
        #提笔到右上角(40,120)位置,画一个小圆,表示右眼
        turtle.penup()
        turtle.setpos(40,120)
        turtle.pendown()
        turtle.circle(10)
        #提示语
        turtle.penup()
        turtle.setpos(-80,-30)
        turtle.pendown()
        turtle.write("等待2秒中,准备带你去看豪车了哦!",font=32)
        #隐藏那个画笔箭头
        turtle.hideturtle()
        
    #先画笑脸,等待2s后重置画笔,然后开始画车
    turtle.ontimer(drawFace(),t=2000)
    turtle.reset()
    turtle.onclick(drawCar())

    运行这个文件,整个过程变成了一个简单的动画,示例如下:

    84ea520565f6485b9abed7ad7c31eb7b.gif

    (7)复杂绘图示例

    用turtle画出简单的图形容易,如果想画出复杂的图形则有点考验耐心和思维过程。网上有很多turtle绘制的复杂图形,那代码就会大段大段的写。限于篇幅我们不再一一复现这些复杂图形。幸好在turtle模块里就有一些案例,在刚才命名的turtle1.py主菜单里的help菜单就有turtle demo,点击之后就出来一个窗口如下:

    14697aed1144a8ed70161e0f253403e3.png

    从左侧的examples可以选择其中一种案例,窗口左侧为turtle代码,右侧点击start可以显示出对应的绘图效果。如上述的forest案例,点击start后绘制出来三棵树,非常漂亮。这些案例中使用到了python的面向对象、函数、随机、时钟等多种思维和知识,也是python知识的一种综合应用,如果方法和毅力得当,确实是提升学习和应用python的有效手段。

    展开全文
  • Python-turtle库小乌龟位置的设定

    千次阅读 2022-04-09 22:52:09
    python库之turtle库海龟位置的设定

    1、首先要说明的是,写这篇文章的原因是实在看着网上的答案不太行,我在CSDN上找到的或者是其他什么博客园找到的,都是转载来自这个CSDN上的一篇文章,就是使用goto()语句解决,但是其实还没有完全解决

    问题的来源是中国大学慕课网上,北理工老师嵩天讲的python基础语法课程有关turtle库的讲解。

    甚至我看之前关于这个问题的CSDN的文章中的截图甚至都是嵩天老师讲课中的内容图!!!我真的服了,,,

    2、回到问题,为什么要调整小乌龟的位置,这是因为,在实际画图过程中,乌龟的默认位置在画布的最中间,比如这会儿我要画一个六边形,但是如果长度稍微长点的话(在不设置画布的前提下),就会出现这样的情形。

    也就是画笔溢出

    所以这时候就要调整海龟的位置,但是如果按照我看过的那个博主的文章按照他的方法做的话,效果就是这个样子。。。

     中间会出现一条横线。。。这是为什么呢?因为海龟一直在画布上爬行,它要爬到内个地方去,。。。这时候正确的解决方法是这样

    3、解决方法:使用penup()和pendown()函数,在还没有正式画图形之前,先使用penup函数,让海龟不要在画布上爬行着过去,让他飞起来过去,然后在调整好位置之后(这个时候使用goto函数)再使用pendown函数,让海龟落下,再进行绘画,效果如下

    源代码:

    import turtle as t
    t.penup()
    t.goto(-300,400)
    t.pendown()
    t.setup(1000,1000)
    t.fd(200)
    t.right(60)
    t.fd(200)
    t.right(60)
    t.fd(200)
    t.right(60)
    t.fd(200)
    t.right(60)
    t.fd(200)
    t.right(60)
    t.fd(200)
    t.done()

    上边就是问题的解决方法,,嵩天老师的课挺好的,我也是复习完才解决的问题,那一位博主没解决实际问题。

     

    展开全文
  • Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、... 画布(canvas)画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置设置画布大小turtle.screensize(c...
  • python turtle库学习笔记

    2020-11-23 12:46:03
    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形...
  • turtle库各种使用方法的代码和解释,调整画笔粗细,速度,颜色,画布背景颜色,画布大小,turtle线条粗细,以及各种常用的turtke,绘制完后不关闭绘图窗口的代码有何区别
  • (2)from turtle import ...作为前导:(3) import turtle as t保留字as将turtle库给予别名t, 则对turtle库中函数调用采用更简洁的t.( )形式:二、绘图的基础知识(1)绘图窗口设置命令turtle.setup(400,300,200,100)...
  • Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形...
  • Python内置模块turtle绘图详解

    千次阅读 2020-11-20 17:43:09
    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、...画布(canvas)画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置设置画布大小turtle.screensize(can...
  • 全网最细海龟 (turtle) 画图讲解 (三):设置画笔样式

    万次阅读 多人点赞 2020-12-30 00:55:19
    设置画笔样式1.1 画笔初始形状1.2 设置画笔颜色1.3 落笔与抬笔1.4 设置线条粗细1.5 隐藏与显示海龟光标1.6 设置画笔的速度 最近博主在 CSDN 上看到许多关于海龟画图的案例,如画圣诞树、五角星等,但是都是直接给出...
  • Python turtle学习笔记

    2020-11-23 12:46:02
    一、简介Turtle最早来自于LOGO语言,是专门用于小...由于是内部库,使用importturtle语句就能引入turtle库,绘图主要有以下几个步骤:设置画布、设置画笔、控制海龟移动绘制图形、色彩填充等。二、基础知识1)turtle...
  • python的强大在于它有许多的强大的库,turtle就是其中之一。利用turtle,你可以进行交互式的绘画,作为一个艺术白痴,想要画一幅画可能很困难,但是利用python的turtle库,只需要几行代码你就能实现绘画。turtle是...
  • pythong模块turtle简单用法

    千次阅读 2020-11-25 15:54:28
    ##初始turtle:t = turtle.Turtle() 或者 t = turtle.Pen()##查询turtle状态#位置t.position()#箭头朝向,箭头朝向按照顺时针或者逆时针偏离的角度描述,具体是顺时针或者逆时针取决于turtle.mode()的值,默认turtle...
  • Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、... 画布(canvas)画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置设置画布大小turtle.screensize(c...
  • turtle的文档:https://docs.python.org/3/library/turtle.html ...# 设置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() turtle.right(90) # 花蕊 turtle.fillcolor(red) turtle.begin_f
  • ##初始turtle:t = turtle.Turtle() 或者 t = turtle.Pen()##查询turtle状态#位置t.position()#箭头朝向,箭头朝向按照顺时针或者逆时针偏离的角度描述,具体是顺时针或者逆时针取决于turtle.mode()的值,默认turtle...
  • python :turtle画笔设置函数

    千次阅读 2020-09-02 22:37:58
    函数 描述 : 初始化画布 (这里只提供了turtle的一些基本设置函数,更多函数请自行百度) turtle.penup() 提起画笔,海⻳⻜行不留下痕迹 turtle.pendown() 放下画笔,海⻳爬行留下痕迹 turtle.pencolor(co
  • 主要介绍了Python如何使用turtle库绘制图形,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Python-Turtle 简易教程

    千次阅读 2020-11-24 10:51:18
    我们通过控制初始位置为(0,0)的海龟进行移动,在屏幕上留下线条最终构成我们想要的图像。废话不多说,先上代码:importturtleimportrandomclassMyTurtle(turtle.Turtle):#画一个初始角度为x,边长为x的正方形defdraw_...
  • 主要为大家详细介绍了python使用turtle库绘制时钟,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、... 画布(canvas)画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置设置画布大小turtle.screensize(c...
  •  画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。  设置画布大小  turtle.screensize(canvwidth=None, canvheight=None, bg=None),参数分别为画布的宽(单位像素), 高, 背景颜色。  
  • turtle库绘制图形的基本框架:通过一个小海龟在坐标系中的爬行轨迹绘制图形,小海龟的初始位置在画布中央。 turtle.setup(width,height,startx,starty) 1.width,height:为主窗体的宽和高 2.startx,starty:为窗口...
  • turtle

    2022-04-12 18:19:40
    1.turtle库概述 turttle(海龟)库是turtle绘图体系python的实现。 turtle :1969年诞生,作用:程序设计入门 turtle库是python的标准库之一,入门级别的图形绘制函数 python 计算生态=标准库+第三方库 标准库:...
  • 详解Python绘图Turtle

    2020-09-18 14:02:47
    Turtle库是Python语言中一个很流行的绘制图像的函数库,这篇文章主要介绍了Python绘图Turtle库的相关知识,需要的朋友可以参考下
  • Python绘图Turtle库详解

    千次阅读 2020-11-20 17:43:10
    Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、... 画布(canvas)画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置设置画布大小turtle.screensize(c...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,136
精华内容 4,054
关键字:

turtle设置初始位置

友情链接: dlearn.zip