Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)

文章目录

  • turtle库
    • 简介
    • 帮助
    • 面向对象和面向过程
    • 公共的类
    • 一、类RawTurtle/Turtle的方法
      • 海龟的运动
        • 移动和绘图
          • 1. forward(distance)或fd(distance)
          • 2. back(distance)或bk(distance)或backward(distance)
          • 3. right(angle)或rt(angle)
          • 4. left(angle)或lt(angle)
          • 5. goto(x, y=None)或setpos(x, y=None)或setposition(x, y=None)
          • 6. setx(x)
          • 7. sety(y)
          • 8. setheading(to_angle)或seth(to_angle)
          • 9. home()
          • 10. circle(radius, extent=None, steps=None)
          • 11. dot(size=None, *color)
          • 12. stamp()
          • 13. clearstamp(stampid)
          • 14. clearstamps(n=None)
          • 15. undo()
          • 16. speed(speed=None)
        • 设置海龟状态
          • 1. position()或pos()
          • 2. towards(x, y=None)
          • 3. xcor()
          • 4. ycor()
          • 5. heading()
          • 6. distance(x, y=None)
        • 设置和测量
          • 1. degrees(fullcircle=360.0)
          • 2. radians()
      • 画笔的控制
        • 绘画状态
          • 1. pendown()或pd()或down()
          • 2. penup()或pu()或up()
          • 3. pensize(width=None)或width(width=None)
          • 4. pen(pen=None, **pendict)
          • 5. isdown()
        • 颜色控制
          • 1. pencolor(*args)
          • 2. fillcolor(*args)
          • 3. color(*args)
        • 填充
          • 1. filling()
          • 2. begin_fill()
          • 3. end_fill()
        • 更多的绘画控制
          • 1. reset()
          • 2. clear()
          • 3. write(arg, move=False, align="left", font=("Arial", 8, "normal"))
      • 海龟的属性
        • 可见性
          • 1. hideturtle()或ht()
          • 2. showturtle()或st()
          • 3. isvisible()
        • 外观
          • 1. shape(name=None)
          • 2. resizemode(rmode=None)
          • 3. shapesize(stretch_wid=None, stretch_len=None, outline=None)或turtlesize(stretch_wid=None, stretch_len=None, outline=None)
          • 4. shearfactor(shear=None)
          • 5. tilt(angle)
          • 6. settiltangle(angle)
          • 7. tiltangle(angle=None)
          • 8. shapetransform(t11=None, t12=None, t21=None, t22=None)
          • 9. get_shapepoly()
      • 事件的使用
          • 1. onclick(fun, btn=1, add=None)
          • 2. onrelease(fun, btn=1, add=None)
          • 3. ondrag(fun, btn=1, add=None)
      • 特殊的方法
          • 1. begin_poly()
          • 2. end_poly()
          • 3. get_poly()
          • 4. clone()
          • 5. getturtle()或getpen()
          • 6. getscreen()
          • 7. setundobuffer(size)
          • 8. undobufferentries()
    • 二、类TurtleScreen/Screen的方法
      • 窗口控制
          • 1. bgcolor(*args)
          • 2. bgpic(picname=None)
          • 3. clear()或clearscreen()
          • 4. reset()或resetscreen()
          • 5. screensize(canvwidth=None, canvheight=None, bg=None)
          • 6. setworldcoordinates(llx, lly, urx, ury)
      • 动画控制
          • 1. delay(delay=None)
          • 2. tracer(n=None, delay=None)
          • 3. update()
      • 画布的事件
          • 1. listen(xdummy=None, ydummy=None)
          • 2. onkey(fun, key)或onkeyrelease(fun, key)
          • 3. onkeypress(fun, key=None)
          • 4. onclick(fun, btn=1, add=None)或onscreenclick(fun, btn=1, add=None)
          • 5. ontimer(fun, t=0)
          • 6. mainloop()或done()
      • 输入方法
          • 1. textinput(title, prompt)
          • 2. numinput(title, prompt, default=None, minval=None, maxval=None)
      • 设置和特殊方法
          • 1. mode(mode=None)
          • 2. colormode(cmode=None)
          • 3. getcanvas()
          • 4. getshapes()
          • 5. register_shape(name, shape=None)或addshape(name, shape=None)
          • 6. turtles()
          • 7. window_height()
          • 8. window_width()
      • 不是从类TurtleScreen继承的特定于类Screen的方法
          • 1. bye()
          • 2. exitonclick()
          • 3. setup(width=_CFG["width"], height=_CFG["height"], startx=_CFG["leftright"], starty=_CFG["topbottom"])
          • 4. title(titlestring)
    • turtle.cfg文件配置画布和海龟
    • 演示脚本
      • 复杂的传统海龟绘图
      • 绘制模拟时钟显示本机的当前时间
      • 更多的演示脚本


turtle库

简介

turtle库是非常适合初学者甚至小朋友使用的简单图形绘制模块。
自Python2.6版本以后,turtle库就已经成为Python的内嵌模块,无需特别安装。
turtle库中的指令,形象而简单,它绘制的坐标轴以画布中心点为原点。在标准模式中海龟的初始方向是水平向右(向东),一般情况下是标准模式,可参考函数mode() 进行修改。
Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第1张图片

帮助

  1. Python内置的函数help([object])
    函数help() 通过调用内置的交互式帮助系统在帮助文档里面进行查找。如果没有给出参数,帮助系统将在解释器控制台启动。如果参数是字符串,那么该字符串将作为模块、函数、类、方法、关键字或帮助文档主题的名称进行查找,并在控制台上打印帮助页面。如果参数是任何其他类型的对象,则生成该对象的帮助页。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第2张图片
  2. Python自带的帮助文档
    在Python安装路径下的Doc里面可以找到pythonXXX.chm帮助文档。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第3张图片
  3. Python官网的帮助文档
    https://docs.python.org/zh-cn/3.8/index.html

面向对象和面向过程

turtle库以面向对象和面向过程的方式提供了基本方法。因为它使用tkinter接口作为基础,所以需要一个安装了Tk支持的Python版本。
:如果要在画布上使用多个海龟对象,必须使用面向对象的接口。
在下文给出的所有函数的参数列表中,函数的第一个附加参数self在本文中都省略了。

  • 面向对象的接口在下文中介绍了包含的公共的类。
    以下是面向对象的写法:
# 第一种写法
import turtle
turtle01 = turtle.Turtle()  #创建一个名为turtle01的海龟对象
turtle01.fd(100)  #调用方法让turtle01这个海龟对象前进

# 第二种写法
from turtle import Turtle
turtle01 = Turtle()  #创建一个名为turtle01的海龟对象
turtle01.fd(100)  #调用方法让turtle01这个海龟对象前进
  • 面向过程的接口提供了从类Screen和类Turtle的方法中派生出来的函数。它们具有与对应方法相同的名称。当调用从Screen方法派生的函数时,将会自动创建一个画布对象。当调用从Turtle方法派生的函数时,将会自动创建一个未命名的海龟对象。
    以下是面向过程的写法:
# 第一种写法
import turtle
turtle.fd(100)  #调用方法让海龟前进

# 第二种写法
from turtle import *
fd(100)  #调用方法让海龟前进

公共的类

  • class turtle.RawTurtle(canvas)或class turtle.RawPen(canvas)
    功能:创建一个海龟对象。它可以调用下文的类RawTurtle/Turtle的所有方法。
    参数canvas:一个由tkinter.Canvas或ScrolledCanvas或TurtleScreen创建的对象。
  • class turtle.Turtle()
    功能:类RawTurtle的子类,继承了类RawTurtle的所有方法,不同的是在第一次调用时会自动创建一个默认的Screen对象。
  • class turtle.TurtleScreen(cv)
    功能:创建一个画布对象。它可以调用下文的类TurtleScreen/Screen的所有方法。
    参数cv:一个由tkinter.Canvas创建的对象。
  • class turtle.Screen()
    功能:类TurtleScreen的子类,继承了类TurtleScreen的所有方法,不同的是另外还增加了四个方法。
  • class turtle.ScrolledCanvas(master)
    功能:使用是类Screen,从而自动提供了一个滚动的画布。
    参数master:一些包含在滚动画布里面的Tkinter小部件,即添加了滚动条的tkinter.Canvas的对象。
  • class turtle.Shape(type_, data)
    功能:海龟形状的数据结构建模。
    参数type_:字符串"polygon"、“image”、"compound"取其中之一。
    对于(type_, data)必须遵循以下的规范:
type_ data
“polygon” 一个多边形元组,即一对坐标的元组
“image” 一个图像(此形式仅供内部使用)
“compound” None(必须使用函数addcomponent()构造复合形状)
  • class turtle.Vec2D(x, y)
    功能:一个二维向量类,用作实现海龟图形的辅助类。可能对海龟形状程序也很有用。它是派生自元组,所以向量就是元组。
    提供以下运算:
语句 含义
a + b 向量加法
a - b 向量减法
a * b 数量积
k * a 或 a * k 数乘
abs(a) 向量a的模
a.rotate(angle) 旋转

一、类RawTurtle/Turtle的方法

海龟的运动

移动和绘图

1. forward(distance)或fd(distance)
  • 功能
    在海龟前进的方向上,将海龟向前移动指定的距离。
    距离的单位是像素,下面提到的长度单位一般都是像素。
  • 参数
    distance(整数或浮点数):海龟移动的距离。
2. back(distance)或bk(distance)或backward(distance)
  • 功能
    将海龟向后移动一定距离,与海龟前进的方向相反。但不会改变海龟的方向。
  • 参数
    distance(整数或浮点数):海龟移动的距离。
3. right(angle)或rt(angle)
  • 功能
    以角度为单位将海龟右转。
    默认单位是角度,但可以通过函数degrees()函数redians() 来设置。
    角度方向取决于海龟模式,请参考函数mode()
  • 参数
    angle(整数或浮点数):海龟右转的角度。
4. left(angle)或lt(angle)
  • 功能
    以角度为单位将海龟左转。
    默认单位是角度,但可以通过函数degrees()函数redians() 来设置。
    角度方向取决于海龟模式,请参考函数mode()
  • 参数
    angle(整数或浮点数):海龟左转的角度。
5. goto(x, y=None)或setpos(x, y=None)或setposition(x, y=None)
  • 功能
    把海龟移到指定的坐标点(x, y)。但不会改变海龟的方向。
    如果y为None,则x必须是一对坐标或一个Vec2D。(例如x可以由函数position() 返回)
    如果画笔状态是放下的,则会画出移动轨迹。
  • 参数
    x(一个数字,或一对坐标,或一个向量):指定的x轴坐标。
    y(一个数字,或None):指定的y轴坐标。
6. setx(x)
  • 功能
    将海龟的x轴坐标设置为x,y轴坐标不变。
  • 参数
    x(整数或浮点数):设置新的x轴坐标。
7. sety(y)
  • 功能
    将海龟的y轴坐标设置为y,x轴坐标不变。
  • 参数
    y(整数或浮点数):设置新的y轴坐标。
8. setheading(to_angle)或seth(to_angle)
  • 功能
    根据to_angle的值设置海龟当前的方向。角度方向取决于海龟模式,请参考函数mode()。
  • 参数
    to_angle(整数或浮点数):设置的角度。以下是一些常用的度数:
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第4张图片
9. home()
  • 功能
    将海龟移动到原点坐标(0, 0),并将其方向设置为其初始方向(方向取决于模式,请参考函数mode())。
10. circle(radius, extent=None, steps=None)
  • 功能
    画一个给定半径的圆或弧。圆心是在海龟的左侧,相距radius的长度。
  • 参数
    radius(整数或浮点数):决定了圆的半径。可取正负值,如果radius为正,则按逆时针方向画弧,否则按顺时针方向画弧。
    extent(整数或浮点数或None):决定了画弧的范围(例extent=180表示半圆)。弧的一个端点是当前的笔尖。如果没有给出参数,则画出整个圆。最后,海龟的方向会随着extent的大小而改变。
    steps(整数或None):当圆和其内接的正多边形近似时,steps决定了正多边形的边数。如果没有给出,它将自动计算。可用于绘制规则多边形。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第5张图片
11. dot(size=None, *color)
  • 功能
    用指定颜色来画一个直径size大小的圆点。
  • 参数
    size(大于等于1的整数,或None):决定了圆点的直径。如果没有给出参数,则使用画笔尺寸+4到画笔尺寸*2之间的最大尺寸。
    color(颜色规范字符串,或十六进制颜色码):决定了圆点的颜色。
12. stamp()
  • 功能
    在画布上以当前海龟的位置复制一个海龟的形状,然后留下印记。
    该函数会返回一个值stampid,它是用来标识留下的印记,可以通过调用函数clearstamp(stampid) 来删除它。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第6张图片
13. clearstamp(stampid)
  • 功能
    删除指定stampid的海龟印记。
  • 参数
    stampid(整数):必须是前面的==函数stamp()==调用的返回值。
14. clearstamps(n=None)
  • 功能
    删除所有或前n个/后n个海龟印记。
  • 参数
    n(整数或None):如果n为None,则删除所有印记;如果n>0,删除前n个印记;否则如果n<0,删除后n个印记。
15. undo()
  • 功能
    撤消最后一个海龟动作。可重复撤消,撤消操作的次数由撤消缓冲区的大小决定。(请参考函数setundobuffer())
16. speed(speed=None)
  • 功能
    设置海龟的速度,从1到10的速度使画线和转海龟的动画越来越快。
  • 参数
    speed(0到10范围内的整数,或速度规范字符串):如果没有参数,返回当前速度。如果输入的数字大于10或小于0.5,则speed变为0。注意:speed=0表示没有动画发生。
    相关速度规范字符串对应的速度值如下:
    •“fastest”:0
    •“fast”:10
    •“normal”:6
    •“slow”:3
    •“slowest”:1

设置海龟状态

1. position()或pos()
  • 功能
    返回海龟的当前位置(x, y)(可作为一个Vec2D向量)。
2. towards(x, y=None)
  • 功能
    返回从海龟当前位置到指定位置(x, y)或向量或另一只海龟之间的直线方向与初始方向的夹角(矢量的夹角)。
    :只与海龟初始方向有关,与海龟当前方向无关。海龟的初始方向取决于海龟模式。(请参考函数mode())
  • 参数
    x(一个数字,或一对坐标,或一个向量,或另一只海龟对象):指定的x轴坐标。
    y(一个数字,或None):指定的y轴坐标。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第7张图片
3. xcor()
  • 功能
    返回海龟的x轴坐标。
4. ycor()
  • 功能
    返回海龟的y轴坐标。
5. heading()
  • 功能
    返回海龟当前的前进方向,是一个浮点数(数值取决于海龟模式)。
    角度方向取决于海龟模式,请参考函数mode()
6. distance(x, y=None)
  • 功能
    返回从海龟当前位置到指定位置(x, y)或向量或另一只海龟之间的距离,以像素为单位。
  • 参数
    x(一个数字,或一对坐标,或一个向量,或另一只海龟对象):指定的x轴坐标。
    y(一个数字,或None):指定的y轴坐标。

设置和测量

1. degrees(fullcircle=360.0)
  • 功能
    设置角度测量单位,即设置一个完整圆的相对度数。默认值是360度。
  • 参数
    fullcircle(整数或浮点数):完整圆的相对度数。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第8张图片
2. radians()
  • 功能
    将角度测量单位设置为弧度。相当于函数degrees(2*math.pi)。

画笔的控制

绘画状态

1. pendown()或pd()或down()
  • 功能
    把画笔放下,当移动的时候会画出轨迹。
2. penup()或pu()或up()
  • 功能
    把画笔提起,当移动的时候不会画出轨迹。
3. pensize(width=None)或width(width=None)
  • 功能
    将线的宽度设置为width。
    如果调整模式被设置为“auto”,而海龟形状是一个多边形,则用新设置的相同宽度的线绘制该多边形。(请参考函数resizemode()函数shape())
  • 参数
    width(正数或None):设置的宽度。如果没有给出参数,则返回当前的宽度。
4. pen(pen=None, **pendict)
  • 功能
    使用关键字的参数来设置画笔的状态和属性。
    这个字典可以用作函数pen()后续调用时的参数,用以恢复到以前的画笔状态。此外,可以将这些属性中的一个或多个作为键值对提供。可以用于在一条语句中设置多个属性。
    :需要附带了解一下字典的概念
    https://www.runoob.com/python3/python3-dictionary.html
  • 参数
    pen:自定义的一个字典名。可以为None。
    pendict:包含一个或多个键值对。
    以下列出了键以及对应的取值:
    • shown:True或False
    • pendown:True或False
    • pencolor:颜色规范字符串,或十六进制颜色码
    • fillcolor:颜色规范字符串,或十六进制颜色码
    • pensize:正数
    • speed:0到10范围内的整数或浮点数
    • resizemode:“auto” 或 “user” 或 “noresize”
    • stretchfactor:(正数,正数)
    • outline:正数
    • tilt:整数或浮点数
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第9张图片
5. isdown()
  • 功能
    如果笔是放下状态的,返回True;如果笔是提起状态的,返回False。

颜色控制

1. pencolor(*args)
  • 功能
    返回或设置画笔颜色。如果海龟形状是多边形,则用新设置的画笔颜色绘制该多边形的轮廓。(请参考函数shape())
  • 参数
    允许有以下四种输入格式:
    1、pencolor()
    返回当前画笔的颜色规范字符串或元组。可以作为另一个颜色/画笔颜色/填充颜色调用的输入参数。
    2、pencolor(colorstring)
    将画笔颜色设置为colorstring,这是一个Tk颜色规范字符串,例如"red"、“blue"或”#33cc8c"。
    3、pencolor((r, g, b))
    设置画笔颜色为由r、g和b的元组表示的RGB颜色。r、g和b的每个值都必须在0到colormode的范围内,其中colormode为1.0或255(请参考函数colormode() )。
    4、pencolor(r, g, b)
    设置画笔颜色为r、g和b表示的RGB颜色。r、g和b的每个值都必须在0到colormode范围内,其中colormode为1.0或255(请参考函数colormode())。
2. fillcolor(*args)
  • 功能
    返回或设置填充颜色。
  • 参数
    允许有以下四种输入格式:
    1、fillcolor()
    2、fillcolor(colorstring)
    3、fillcolor((r, g, b))
    4、fillcolor(r, g, b)
    以上的输入格式可参照 函数pencolor(*args) 的输入格式,这里不再介绍。
3. color(*args)
  • 功能
    返回或设置画笔颜色和填充颜色。
  • 参数
    允许有以下多种输入格式:
    1、color()
    以函数pencolor()和函数fillcolor()返回的一对颜色规范字符串或元组的形式,返回当前画笔颜色和当前填充颜色。
    2、color(colorstring), color((r,g,b)), color(r,g,b)
    可参照函数pencolor(*args)的输入格式,将填充颜色和画笔颜色都设置为相同颜色值。
    3、color(colorstring1, colorstring2), color((r1,g1,b1), (r2,g2,b2))
    color(colorstring1, colorstring2)相当于pencolor(colorstring1)和fillcolor(colorstring2)两者结合。
    另外一种输入格式也和上述的类似。

填充

1. filling()
  • 功能
    返回填充状态(如果填充了则为True,否则为False)。
2. begin_fill()
  • 功能
    在绘制要填充的图形之前被调用。
3. end_fill()
  • 功能
    填充最后一次调用==函数begin_fill()==后绘制的图形。

更多的绘画控制

1. reset()
  • 功能
    从画布上删除海龟的绘图,重新将海龟居中并将变量设置为默认值。
2. clear()
  • 功能
    从画布上删除海龟的绘图,但不会移动海龟,而且海龟的状态和位置以及其他海龟的绘图不受影响。
3. write(arg, move=False, align=“left”, font=(“Arial”, 8, “normal”))
  • 功能
    将文本按设置的对齐方式和给定的字体格式写在当前的海龟位置。
  • 参数
    arg(字符串对象):写在画布上的文本。
    move(True/False):如果move为True,则将海龟移动到文本的右下角,否则不移动。默认情况下,move为False。
    align(“left"或"center"或"right”):对齐方式。
    font(包含三项(字体名称、字体大小、字体类型)):字体属性。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第10张图片

海龟的属性

可见性

1. hideturtle()或ht()
  • 功能
    让海龟隐形。
    当你在做一些复杂的绘图过程中这样做是一个好主意,因为隐藏海龟可以明显地加快绘图的速度。
2. showturtle()或st()
  • 功能
    让海龟显形。
3. isvisible()
  • 功能
    如果海龟是可见的,返回True;如果它是不可见的,返回False。

外观

1. shape(name=None)
  • 功能
    将海龟形状设置为指定的形状,如果没有指定形状,则返回当前海龟形状的名称。
  • 参数
    name(字符串或None):带名称的海龟形状必须存在于画布的海龟形状字典中。最初有这些海龟形状:“arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”。要了解如何添加海龟形状,请参考函数register_shape()
2. resizemode(rmode=None)
  • 功能
    将调整模式设置为以下值之一:“auto”、“user”、“noresize”。如果没有给出参数,则返回当前的调整模式。
  • 参数
    rmode(“auto”或“user”或“noresize”或None):不同的调整模式有以下的效果:
    “auto”:根据画笔的尺寸来调整海龟形状。(请参考函数pensize())
    “user”:根据函数shapesize()设置的拉伸因子和轮廓宽度来调整海龟形状。resizemode(“user”)和函数shapesize()经常一起使用。(请参考函数shapesize())
    “noresize”:海龟形状不会发生变化。
3. shapesize(stretch_wid=None, stretch_len=None, outline=None)或turtlesize(stretch_wid=None, stretch_len=None, outline=None)
  • 功能
    设置海龟形状的尺寸大小。如果没有给出参数,则返回当前海龟形状的尺寸。当且仅当将调整模式设置为user时,海龟形状将根据其拉伸因子和轮廓宽度进行变化。
  • 参数
    stretch_wid(正数或None):垂直于海龟方向的拉伸因子,即拉伸海龟的宽度。为None时则为当前值。默认初始值为1。
    stretch_len(正数或None):平行于海龟方向的拉伸因子,即拉伸海龟的长度。为None时则为当前值。默认初始值为1。
    outline(正数或None):海龟形状的轮廓宽度。为None时则为当前值。默认初始值为1。
4. shearfactor(shear=None)
  • 功能
    设置或返回当前剪切因子。根据给定的剪切因子(即剪切角的正切值)剪切出海龟形状。剪切角是指海龟前进的方向和剪切线的夹角(锐角)。但不会改变海龟的方向和面积。
  • 参数
    shear(整数或浮点数或None):取剪切角的正切值。取0时表示不剪切。如果没有给出参数,则返回当前剪切因子。
5. tilt(angle)
  • 功能
    在当前的旋转角的基础上根据angle旋转海龟形状,但不会改变海龟前进的方向。
    角度方向取决于海龟模式,请参考函数mode()
  • 参数
    angle(整数或浮点数):旋转角。取负值时顺时针旋转,取正值时逆时针旋转。
6. settiltangle(angle)
  • 功能
    无论当前的旋转角如何,将海龟形状旋转到指定的角度方向。但不会改变海龟前进的方向。
    角度方向取决于海龟模式,请参考函数mode()
  • 参数
    angle(整数或浮点数):旋转角。取负值时顺时针旋转,取正值时逆时针旋转。
7. tiltangle(angle=None)
  • 功能
    设置或返回当前旋转角。但不会改变海龟前进的方向。
    无论当前的旋转角如何,将海龟形状旋转到指定的角度方向。
    角度方向取决于海龟模式,请参考函数mode()
  • 参数
    angle(整数或浮点数或None):旋转角。取负值时顺时针旋转,取正值时逆时针旋转。如果没有给出参数,则返回当前的旋转角。
8. shapetransform(t11=None, t12=None, t21=None, t22=None)
  • 功能
    设置或返回当前海龟形状的变换矩阵。
    如果没有给出参数,则返回一个包含4个元素的元组的变换矩阵。另外根据由第一行t11、t12和第二行t21、t22组成的矩阵,对给定的元素进行设置,并对海龟形状进行变换。行列式t11 * t22 - t12 * t21必须不为零,否则会产生错误。根据给定的矩阵修改拉伸因子、剪切因子和旋转角度。
  • 参数
    t11、t12、t21、t22(整数或浮点数或None):具体的含义目前还不清楚,需要自行好好研究。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第11张图片
9. get_shapepoly()
  • 功能
    以坐标对元组的形式返回当前海龟形状。这可以用来定义一个新的形状或复合形状的组件。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第12张图片

事件的使用

1. onclick(fun, btn=1, add=None)
  • 功能
    将函数fun绑定到此海龟上的鼠标单击事件。
  • 参数
    fun(函数或None):一个带有两个参数的函数,它将与画布上单击点的坐标(x,y)一起被调用。如果函数fun为None,则删除现有绑定。
    btn(整数):表示鼠标上按钮的数字,默认为1。1表示鼠标左键,2表示鼠标中间键,3表示鼠标右键。
    add(True或False或None):如果为True,将添加一个新的绑定,否则将替换以前的绑定。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第13张图片
2. onrelease(fun, btn=1, add=None)
  • 功能
    将函数fun绑定到此海龟上的鼠标按钮释放事件。
  • 参数
    fun(函数或None):一个带有两个参数的函数,它将与画布上单击点的坐标(x,y)一起被调用。如果函数fun为None,则删除现有绑定。
    btn(整数):表示鼠标上按钮的数字,默认为1。1表示鼠标左键,2表示鼠标中间键,3表示鼠标右键。
    add(True或False或None):如果为True,将添加一个新的绑定,否则将替换以前的绑定。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第14张图片
3. ondrag(fun, btn=1, add=None)
  • 功能
    将函数fun绑定到此海龟上的鼠标移动事件。
    :在海龟上的每一个鼠标移动事件之前都有一个鼠标点击事件发生。
  • 参数
    fun(函数或None):一个带有两个参数的函数,它将与画布上单击点的坐标(x,y)一起被调用。如果函数fun为None,则删除现有绑定。
    btn(整数):表示鼠标上按钮的数字,默认为1。1表示鼠标左键,2表示鼠标中间键,3表示鼠标右键。
    add(True或False或None):如果为True,将添加一个新的绑定,否则将替换以前的绑定。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第15张图片

特殊的方法

1. begin_poly()
  • 功能
    开始记录多边形的顶点。使当前海龟的位置是多边形的第一个顶点。
2. end_poly()
  • 功能
    停止记录多边形的顶点。使当前海龟的位置是多边形的最后一个顶点。最后一个顶点将与第一个顶点相连。
3. get_poly()
  • 功能
    返回最后记录的多边形。这个多边形是用来设置海龟形状的,可参考函数register_shape()
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第16张图片
4. clone()
  • 功能
    创建并返回具有相同位置、海龟方向和海龟属性的海龟克隆体。
5. getturtle()或getpen()
  • 功能
    返回Turtle对象本身。唯一合理的用途是作为函数返回未命名的海龟。
6. getscreen()
  • 功能
    返回海龟正在绘制时的TurtleScreen对象。然后可以为该对象调用类TurtleScreen的方法。
7. setundobuffer(size)
  • 功能
    设置或禁用撤销缓冲区。
  • 参数
    size(整数或None):size给出了通过 函数undo() 可以撤消的海龟动作的最大数量。如果size是整数,则安装给定大小的空的撤消缓冲区。如果参数为空,则禁用撤销缓冲区。
8. undobufferentries()
  • 功能
    返回撤消缓冲区中的最大可撤消数。
    :函数setundobuffer()中的size <= 最大可撤消数

二、类TurtleScreen/Screen的方法

窗口控制

1. bgcolor(*args)
  • 功能
    设置或返回画布的背景颜色。
  • 参数
    允许有以下四种输入格式:
    1、bgcolor()
    返回当前画布的背景颜色规范字符串或元组。可以作为另一个颜色/背景颜色调用的输入参数。
    2、bgcolor(colorstring)
    将画布的背景颜色设置为colorstring,这是一个Tk颜色规范字符串,例如"red"、“blue"或”#33cc8c"。
    3、bgcolor((r, g, b))
    设置画布的背景颜色为由r、g和b的元组表示的RGB颜色。r、g和b的每个值都必须在0到colormode的范围内,其中colormode为1.0或255(请参考函数colormode())。
    4、bgcolor(r, g, b)
    设置画布的背景颜色为r、g和b表示的RGB颜色。r、g和b的每个值都必须在0到colormode范围内,其中colormode为1.0或255(请参考函数colormode())。
2. bgpic(picname=None)
  • 功能
    设置背景图像或返回当前背景图像的名称。
  • 参数
    picname(字符串形式的gif文件名,或“nopic”,或None):如果picname是文件名,则将相应的图像设置为背景图像。如果picname是“nopic”,则删除已存在的背景图像。如果picname为None,则返回当前背景图像的文件名。
3. clear()或clearscreen()
  • 功能
    从画布上删除所有的图画和所有的海龟。将当前空的画布重置为初始状态:白色背景,没有背景图像,没有事件绑定和跟踪。
    :这个函数只有在名为clearscreen的情况下才可以作为全局函数使用。而函数clear()是从 类Turtle的函数clear() 派生出来的另一个全局函数。
4. reset()或resetscreen()
  • 功能
    重置所有海龟在画布上的初始状态。
    :这个函数只有在名为resetscreen的情况下才可以作为全局函数使用。而函数reset()是从 类Turtle的函数reset() 派生出来的另一个全局函数。
5. screensize(canvwidth=None, canvheight=None, bg=None)
  • 功能
    如果没有给出参数,则返回当前值(画布宽度,画布高度)。或者调整海龟们正在绘制的画布的大小。但不会改变绘图窗口。要观察画布的隐藏部分,可以使用滚动条。
  • 参数
    canvwidth(正整数或None):画布的新宽度(以像素为单位)。
    cnvheight(正整数或None):画布的新高度(以像素为单位)。
    bg(颜色规范字符串或颜色元组或None):新的背景颜色。
6. setworldcoordinates(llx, lly, urx, ury)
  • 功能
    建立用户自定义坐标系,调用该函数时会自动切换到模式“world”,如果必要时可调用 函数mode() 切换。在这之前先执行一个 函数reset()。如果模式“world”已经激活,所有的图画将根据新的坐标重新绘制。(请参考函数mode())
  • 参数
    llx(整数或浮点数):画布左下方的x坐标。
    lly(整数或浮点数):画布左下方的y坐标。
    urx(整数或浮点数):画布右上方的x坐标。
    ury(整数或浮点数):画布右上方的y坐标。
    这四个参数的正负值决定了坐标轴的方向,下面给出了四种情况。
    这四个参数的数值应该是比例,将海龟绘图窗口当前的宽度划分成x份,将窗口当前的高度划分成y份,以一等份为单位,进行海龟运动。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第17张图片
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第18张图片

动画控制

1. delay(delay=None)
  • 功能
    设置或返回绘图延迟。这大约是两个连续的画布更新之间的时间间隔。绘图延迟越长,动画就越慢。(可和 函数speed() 作比较)
  • 参数
    delay(正整数或None):以毫秒为单位的绘图延迟值。如果参数为空时,则返回当前绘图延迟值。
2. tracer(n=None, delay=None)
  • 功能
    打开或关闭海龟动画,为更新的绘图设置延迟。可用于加速复杂图形的绘制。当参数为空时,返回当前存储值n。
  • 参数
    n(非负整数或None):实际执行n次常规的画布更新。
    delay(非负整数或None):设置延迟值(请参考函数delay())。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第19张图片
3. update()
  • 功能
    执行画布的更新。当tracer关闭时使用。

画布的事件

1. listen(xdummy=None, ydummy=None)
  • 功能
    将焦点设置在画布上(以便收集键盘事件)。
  • 参数
    提供两个伪参数是为了能够将函数listen()传递给函数onclick()
2. onkey(fun, key)或onkeyrelease(fun, key)
  • 功能
    将函数fun绑定到键盘上的按键释放事件。
    :为了能够注册键盘事件,画布必须有焦点。(请参考函数listen())
  • 参数
    fun(函数或None):一个无参的函数。如果函数fun为None,则删除事件绑定。
    key(字符串):按键(如“a”)或按键符号(如“space”)。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第20张图片
3. onkeypress(fun, key=None)
  • 功能
    将函数fun绑定到键盘上的按键事件。
    :为了能够注册键盘事件,画布必须有焦点。(请参考函数listen())
  • 参数
    fun(函数或None):一个无参的函数。如果函数fun为None,则删除事件绑定。
    key(字符串或None):按键(如“a”)或按键符号(如“space”)。如果给定key,则将函数fun绑定到键的按键事件;如果没有给定key,则绑定到任何键的按键事件。
4. onclick(fun, btn=1, add=None)或onscreenclick(fun, btn=1, add=None)
  • 功能
    将函数fun绑定到此画布上的鼠标单击事件。
    :这个函数只有在名为onscreenclick的情况下才可以作为全局函数使用。而函数onclick()是从 类Turtle的函数onclick() 派生出来的另一个全局函数。
  • 参数
    fun(函数或None):一个带有两个参数的函数,它将与画布上单击点的坐标(x,y)一起被调用。如果函数fun为None,则删除现有绑定。
    btn(整数):表示鼠标上按钮的数字,默认为1。1表示鼠标左键,2表示鼠标中间键,3表示鼠标右键。
    add(True或False或None):如果为True,将添加一个新的绑定,否则将替换以前的绑定。
    在这里插入图片描述
5. ontimer(fun, t=0)
  • 功能
    安装一个计时器,在t毫秒之后调用函数fun。
  • 参数
    fun(函数):一个无参的函数,可自定义。
    t(整数或浮点数):一个大于等于零的数,用于计时。
6. mainloop()或done()
  • 功能
    开始事件循环——调用Tkinter接口的函数mainloop()。且必须是海龟绘图程序的最后一个语句。如果在集成开发环境IDLE里面的-n模式(没有子进程)下运行脚本(用于交互式使用海龟绘图),则一定不能使用该函数。

输入方法

1. textinput(title, prompt)
  • 功能
    弹出一个用于输入字符串的对话框窗口。如果确认了对话框,则返回用户输入的字符串。如果取消了对话框,则返回None。
  • 参数
    title(字符串):对话框窗口的标题。
    prompt(字符串):用来提示用户输入什么信息的文本。
2. numinput(title, prompt, default=None, minval=None, maxval=None)
  • 功能
    弹出一个用于输入数字的对话框窗口。如果确认了对话框,则返回用户输入的数字。如果取消了对话框,则返回None。
  • 参数
    title(字符串):对话框窗口的标题。
    prompt(字符串):用来提示用户输入什么数字信息的文本。
    default(整数或浮点数或None):缺省值。
    minval(整数或浮点数或None):用户输入数字的最小值。
    maxval(整数或浮点数或None):用户输入数字的最大值。

设置和特殊方法

1. mode(mode=None)
  • 功能
    设置海龟的模式,并执行复位。如果没有参数,则返回当前模式。
  • 参数
    mode(“standard”或“logo”或“world”):模式“standard”与turtle库兼容。模式“logo”是兼容大多数标志海龟形状。模式“world”使用用户定义的世界坐标(请参考函数setworldcoordinates()),在这种模式下,如果x/y单位比t=1,角度就会失真。
模式 初始的海龟方向 正角
“standard” 水平向右(向东) 逆时针
“logo” 水平向上(向北) 顺时针
2. colormode(cmode=None)
  • 功能
    返回颜色模式,或将其设置为1.0或255。随后,颜色三元组的r、g、b值必须在0到cmode的范围内。
  • 参数
    cmode(取值为1.0或255中的一个):当cmode=1.0时,颜色模式为RGB小数值;当cmode=255时,颜色模式为RGB整数值。当参数为空时,返回当前颜色模式。
颜色 英文字符串 RGB小数值 RGB整数值 十六进制字符串
纯黑 “black” (0, 0, 0) (0, 0, 0) “#000000”
纯红 “red” (1, 0, 0) (255, 0, 0) “#FF0000”
酸橙色 “lime” (0, 1, 0) (0, 255, 0) “#00FF00”
纯蓝 “blue” (0, 0, 1) (0, 0, 255) “#0000FF”
纯白 “white” (1, 1, 1) (255, 255, 255) “#FFFFFF”
青色 “cyan” (0, 1, 1) (0, 255, 255) “#00FFFF”
洋红色 “magenta” (1, 0, 1) (255, 0, 255) “#FF00FF”
纯黄 “yellow” (1, 1, 0) (255, 255, 0) “#FFFF00”
灰色 “gray” (0.50, 0.50, 0.50) (128,128,128) “#808080”
栗色 “maroon” (0.50, 0, 0) (128, 0, 0) “#800000”
纯绿 “green” (0, 0.50, 0) (0, 128, 0) “#008000”
海军蓝 “navy” (0, 0, 0.50) (0, 0,128) “#000080”
水鸭色 “teal” (0, 0.50, 0.50) (0, 128, 128) “#008080”
紫色 “purple” (0.50, 0, 0.50) (128, 0, 128) “#800080”
橄榄色 “olive” (0.50, 0.50, 0) (128, 128, 0) “#808000”
金色 “gold” (1, 0.84, 0) (255, 215, 0) “#FFD700”
粉红色 “pink” (1, 0.75, 0.80) (255, 192, 203) “#FFC0CB”

RGB颜色值与十六进制颜色码转换工具:https://www.sioe.cn/yingyong/yanse-rgb-16/

3. getcanvas()
  • 功能
    返回当前的画布。对于知道如何使用Tkinter画布的人非常有用。
4. getshapes()
  • 功能
    返回当前所有可用海龟形状的名称列表。
5. register_shape(name, shape=None)或addshape(name, shape=None)
  • 功能
    在画布的海龟形状列表中添加一个海龟的形状。因此,只能通过函数shape(shapename) 来调用已添加的海龟形状。
  • 参数
    有三种不同的方法来调用这个函数:
    1)添加相应的图像形状:name是gif文件的名称,而shape是None。
    :图像形状在旋转海龟时不旋转,所以它们不显示海龟的方向。
    2)添加相应的多边形形状:name是一个任意字符串,shape是几对坐标的元组。
    3)安装相应的复合形状:name是一个任意字符串,shape是一个(复合)形状对象。
6. turtles()
  • 功能
    返回画布上所有海龟组成的列表。
7. window_height()
  • 功能
    返回海龟绘图窗口的高度。
8. window_width()
  • 功能
    返回海龟绘图窗口的宽度。

不是从类TurtleScreen继承的特定于类Screen的方法

1. bye()
  • 功能
    关闭海龟绘图窗口。
2. exitonclick()
  • 功能
    将函数bye()绑定到画布上的鼠标点击事件上。如果turtle.cfg文件中using_IDLE的值为False(默认值),函数exitonclick()也会进入主事件循环。可参考函数mainloop()
    :如果你经常使用集成开发环境IDLE并启用-n开关(没有子进程),则将turtle.cfg文件中的using_IDLE设置为True。在这种情况下,IDLE自身的主事件循环对于客户端脚本也是活动的。其中turtle.cfg文件的配置将在下文中详细介绍。
3. setup(width=_CFG[“width”], height=_CFG[“height”], startx=_CFG[“leftright”], starty=_CFG[“topbottom”])
  • 功能
    设置海龟绘图窗口的大小和位置。参数的默认值存储在配置文件中,可以通过turtle.cfg文件进行更改。
  • 参数
    width(整数或浮点数):如果是整数,则以像素为单位设置窗口宽度。如果是浮点数,则是画布的百分比值(默认是0.5=50%的画布宽度)。
    height(整数或浮点数):如果是整数,则以像素为单位设置窗口高度。如果是浮点数,则是画布的百分比值(默认是0.75=75%的画布高度)。
    startx(整数或None):如果为正,则startx为窗口左侧距离电脑屏幕左侧边缘的像素距离,如果为负,则startx为窗口右侧距离电脑屏幕右侧边缘的像素距离,如果为None,则窗口是水平居中的。
    starty(整数或None):如果为正,则starty为窗口顶部距离电脑屏幕顶部边缘的像素距离,如果为负,则starty为窗口底部距离电脑屏幕底部边缘的像素距离,如果为None,则窗口是垂直居中的。
4. title(titlestring)
  • 功能
    设置海龟绘图窗口的标题为给定的titlestring。
  • 参数
    titlestring(字符串):显示在海龟绘图窗口的标题栏中。

turtle.cfg文件配置画布和海龟

  • turtle.cfg文件是一个turtle库内置的默认配置文件。
    如果你想使用一个不同的配置,更好地反映turtle库的特点,或更适合你的需要,那么你可以更改turtle.cfg文件的配置内容。
  • 在turtle.cfg文件里会有以下内容:
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第21张图片
  • 简要说明上图中的内容:
    1)前四行对应 函数setup() 的参数。
    2)第五行和第六行对应于 函数screensize() 的参数。
    3)shape可以是任何内置的海龟形状,如arrow、turtle等。可参考函数shape()
    4)如果你不想使用fillcolor(比如让海龟透明),则必须写成fillcolor = “”。
    :所有非空字符串在turtle.cfg文件中不能有引号。
    5)如果你想要反映海龟的状态,则必须写成resizemode =auto。
    6)如果你设置的是language = italian,那么文档字符串字典文件turtle_docstringdict_italian.py将在导入时加载(在同一个目录中加载)。
    7)exampleturtle和examplescreen定义了相应对象在文档字符串中显示的名称。
    8)如果你经常使用集成开发环境IDLE并启用-n开关(没有子进程),则将using_IDLE设置为True。这将阻止函数exitonclick() 进入主事件循环。
  • turtle.cfg文件存放在Python安装路径下的Lib\turtledemo里面。
    当然turtle.cfg 文件也可以保存于 turtle 所在目录,当前工作目录也可以有一个同名文件。后者会重载覆盖前者的配置。
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第22张图片

演示脚本

复杂的传统海龟绘图

  • 源代码
from turtle import Turtle, mainloop
from time import perf_counter as clock

# wrapper for any additional drawing routines
# that need to know about each other
class Designer(Turtle):

    def design(self, homePos, scale):
        self.up()
        for i in range(5):
            self.forward(64.65 * scale)
            self.down()
            self.wheel(self.position(), scale)
            self.up()
            self.backward(64.65 * scale)
            self.right(72)
        self.up()
        self.goto(homePos)
        self.right(36)
        self.forward(24.5 * scale)
        self.right(198)
        self.down()
        self.centerpiece(46 * scale, 143.4, scale)
        self.getscreen().tracer(True)

    def wheel(self, initpos, scale):
        self.right(54)
        for i in range(4):
            self.pentpiece(initpos, scale)
        self.down()
        self.left(36)
        for i in range(5):
            self.tripiece(initpos, scale)
        self.left(36)
        for i in range(5):
            self.down()
            self.right(72)
            self.forward(28 * scale)
            self.up()
            self.backward(28 * scale)
        self.left(54)
        self.getscreen().update()

    def tripiece(self, initpos, scale):
        oldh = self.heading()
        self.down()
        self.backward(2.5 * scale)
        self.tripolyr(31.5 * scale, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.down()
        self.backward(2.5 * scale)
        self.tripolyl(31.5 * scale, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.left(72)
        self.getscreen().update()

    def pentpiece(self, initpos, scale):
        oldh = self.heading()
        self.up()
        self.forward(29 * scale)
        self.down()
        for i in range(5):
            self.forward(18 * scale)
            self.right(72)
        self.pentr(18 * scale, 75, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.forward(29 * scale)
        self.down()
        for i in range(5):
            self.forward(18 * scale)
            self.right(72)
        self.pentl(18 * scale, 75, scale)
        self.up()
        self.goto(initpos)
        self.setheading(oldh)
        self.left(72)
        self.getscreen().update()

    def pentl(self, side, ang, scale):
        if side < (2 * scale): return
        self.forward(side)
        self.left(ang)
        self.pentl(side - (.38 * scale), ang, scale)

    def pentr(self, side, ang, scale):
        if side < (2 * scale): return
        self.forward(side)
        self.right(ang)
        self.pentr(side - (.38 * scale), ang, scale)

    def tripolyr(self, side, scale):
        if side < (4 * scale): return
        self.forward(side)
        self.right(111)
        self.forward(side / 1.78)
        self.right(111)
        self.forward(side / 1.3)
        self.right(146)
        self.tripolyr(side * .75, scale)

    def tripolyl(self, side, scale):
        if side < (4 * scale): return
        self.forward(side)
        self.left(111)
        self.forward(side / 1.78)
        self.left(111)
        self.forward(side / 1.3)
        self.left(146)
        self.tripolyl(side * .75, scale)

    def centerpiece(self, s, a, scale):
        self.forward(s); self.left(a)
        if s < (7.5 * scale):
            return
        self.centerpiece(s - (1.2 * scale), a, scale)

def main():
    t = Designer()
    t.speed(0)
    t.hideturtle()
    t.getscreen().delay(0)
    t.getscreen().tracer(0)
    at = clock()
    t.design(t.position(), 2)
    et = clock()
    return "runtime: %.2f sec." % (et-at)

if __name__ == '__main__':
    msg = main()
    print(msg)
    mainloop()

  • 运行结果
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第23张图片

绘制模拟时钟显示本机的当前时间

  • 源代码
from turtle import *
from datetime import datetime

def jump(distanz, winkel=0):
    penup()
    right(winkel)
    forward(distanz)
    left(winkel)
    pendown()

def hand(laenge, spitze):
    fd(laenge*1.15)
    rt(90)
    fd(spitze/2.0)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze/2.0)

def make_hand_shape(name, laenge, spitze):
    reset()
    jump(-laenge*0.15)
    begin_poly()
    hand(laenge, spitze)
    end_poly()
    hand_form = get_poly()
    register_shape(name, hand_form)

def clockface(radius):
    reset()
    pensize(7)
    for i in range(60):
        jump(radius)
        if i % 5 == 0:
            fd(25)
            jump(-radius-25)
        else:
            dot(3)
            jump(-radius)
        rt(6)

def setup():
    global second_hand, minute_hand, hour_hand, writer
    mode("logo")
    make_hand_shape("second_hand", 125, 25)
    make_hand_shape("minute_hand",  130, 25)
    make_hand_shape("hour_hand", 90, 25)
    clockface(160)
    second_hand = Turtle()
    second_hand.shape("second_hand")
    second_hand.color("gray20", "gray80")
    minute_hand = Turtle()
    minute_hand.shape("minute_hand")
    minute_hand.color("blue1", "red1")
    hour_hand = Turtle()
    hour_hand.shape("hour_hand")
    hour_hand.color("blue3", "red3")
    for hand in second_hand, minute_hand, hour_hand:
        hand.resizemode("user")
        hand.shapesize(1, 1, 3)
        hand.speed(0)
    ht()
    writer = Turtle()
    #writer.mode("logo")
    writer.ht()
    writer.pu()
    writer.bk(85)

def wochentag(t):
    wochentag = ["Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday", "Sunday"]
    return wochentag[t.weekday()]

def datum(z):
    monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June",
             "July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."]
    j = z.year
    m = monat[z.month - 1]
    t = z.day
    return "%s %d %d" % (m, t, j)

def tick():
    t = datetime.today()
    sekunde = t.second + t.microsecond*0.000001
    minute = t.minute + sekunde/60.0
    stunde = t.hour + minute/60.0
    try:
        tracer(False)  # Terminator can occur here
        writer.clear()
        writer.home()
        writer.forward(65)
        writer.write(wochentag(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.back(150)
        writer.write(datum(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.forward(85)
        tracer(True)
        second_hand.setheading(6*sekunde)  # or here
        minute_hand.setheading(6*minute)
        hour_hand.setheading(30*stunde)
        tracer(True)
        ontimer(tick, 100)
    except Terminator:
        pass  # turtledemo user pressed STOP

def main():
    tracer(False)
    setup()
    tracer(True)
    tick()
    return "EVENTLOOP"

if __name__ == "__main__":
    mode("logo")
    msg = main()
    print(msg)
    mainloop()
  • 运行结果
    Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第24张图片

更多的演示脚本

在Python安装路径下的Lib\turtledemo里面,存放了各种各样的演示脚本。其中__main__.py是一个演示查看器,可用来查看脚本的源码并即时运行。
Python笔记之通过turtle库绘制图形(详细介绍turtle库的函数方法)_第25张图片

你可能感兴趣的:(python)