Lucifer-ww / Coding-Notes

:sunny:Thomas学编程!:sunny: :cloud:学习Python、C++、Web:computer:
https://thomas.blog.csdn.net
24 stars 12 forks source link

Python海龟绘图法最全文档! #3

Open Lucifer-ww opened 4 years ago

Lucifer-ww commented 4 years ago

[toc]

turtle --- 海龟绘图

源码: Lib/turtle.py


概述

海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。

请想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。先执行 import turtle,再执行 turtle.forward(15),它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 turtle.right(25),它将原地右转 25 度。

Turtle star

使用海龟绘图可以编写重复执行简单动作的程序画出精细复杂的形状。

../_images/turtle-star.png

from turtle import *
color('red', 'yellow')
begin_fill()
while True:
    forward(200)
    left(170)
    if abs(pos()) < 1:
        break
end_fill()
done()

通过组合使用此类命令,可以轻松地绘制出精美的形状和图案。

turtle 模块是基于 Python 标准发行版 2.5 以来的同名模块重新编写并进行了功能扩展。

新模块尽量保持了原模块的特点,并且(几乎)100%与其兼容。这就意味着初学编程者能够以交互方式使用模块的所有命令、类和方法——运行 IDLE 时注意加 -n 参数。

turtle 模块提供面向对象和面向过程两种形式的海龟绘图基本组件。由于它使用 tkinter 实现基本图形界面,因此需要安装了 Tk 支持的 Python 版本。

面向对象的接口主要使用“2+2”个类:

  1. TurtleScreen 类定义图形窗口作为绘图海龟的运动场。它的构造器需要一个 tkinter.CanvasScrolledCanvas 作为参数。应在 turtle 作为某个程序的一部分的时候使用。

    Screen() 函数返回一个 TurtleScreen 子类的单例对象。此函数应在 turtle 作为独立绘图工具时使用。作为一个单例对象,其所属的类是不可被继承的。

    TurtleScreen/Screen 的所有方法还存在对应的函数,即作为面向过程的接口组成部分。

  2. RawTurtle (别名: RawPen) 类定义海龟对象在 TurtleScreen 上绘图。它的构造器需要一个 Canvas, ScrolledCanvas 或 TurtleScreen 作为参数,以指定 RawTurtle 对象在哪里绘图。

    从 RawTurtle 派生出子类 Turtle (别名: Pen),该类对象在 Screen 实例上绘图,如果实例不存在则会自动创建。

    RawTurtle/Turtle 的所有方法也存在对应的函数,即作为面向过程的接口组成部分。

过程式接口提供与 ScreenTurtle 类的方法相对应的函数。函数名与对应的方法名相同。当 Screen 类的方法对应函数被调用时会自动创建一个 Screen 对象。当 Turtle 类的方法对应函数被调用时会自动创建一个 (匿名的) Turtle 对象。

如果屏幕上需要有多个海龟,就必须使用面向对象的接口。

注解

以下文档给出了函数的参数列表。对于方法来说当然还有额外的第一个参数 self,这里省略了。

可用的 Turtle 和 Screen 方法概览

Turtle 方法

TurtleScreen/Screen 方法

RawTurtle/Turtle 方法和对应函数

本节中的大部分示例都使用 Turtle 类的一个实例,命名为 turtle

海龟动作

获取海龟的状态

度量单位设置

画笔控制

绘图状态

颜色控制

另参见: Screen 方法 colormode()

填充

更多绘图控制

海龟状态

可见性

外观

使用事件

特殊海龟方法

复合形状

要使用由多个不同颜色多边形构成的复合海龟形状,你必须明确地使用辅助类 Shape,具体步骤如下:

  1. 创建一个空 Shape 对象,类型为 "compound"。

  2. 按照需要使用 addcomponent() 方法向此对象添加多个部件。

    例如:

    >>> s = Shape("compound")
    >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
    >>> s.addcomponent(poly1, "red", "blue")
    >>> poly2 = ((0,0),(10,-5),(-10,-5))
    >>> s.addcomponent(poly2, "blue", "red")
  3. 接下来将 Shape 对象添加到 Screen 对象的形状列表并使用它:

    >>> register_shape("myshape", s)
    >>> shape("myshape")

注解

Shape 类在 register_shape() 方法的内部以多种方式使用。应用程序编写者 只有 在使用上述的复合形状时才需要处理 Shape 类。

TurtleScreen/Screen 方法及对应函数

本节中的大部分示例都使用 TurtleScreen 类的一个实例,命名为 screen

窗口控制

动画控制

另参见 RawTurtle/Turtle 方法 speed()

使用屏幕事件

输入方法

设置与特殊方法

Screen 专有方法, 而非继承自 TurtleScreen

公共类

帮助与配置

如何使用帮助

Screen 和 Turtle 类的公用方法以文档字符串提供了详细的文档。因此可以利用 Python 帮助工具获取这些在线帮助信息:

这些修改版文档字符串是在导入时与方法对应函数的定义一起自动生成的。

文档字符串翻译为不同的语言

可使用工具创建一个字典,键为方法名,值为 Screen 和 Turtle 类公共方法的文档字符串。

如果你 (或你的学生) 想使用本国语言版本的 turtle 在线帮助,你必须翻译文档字符串并保存结果文件,例如 turtle_docstringdict_german.py.

如果你在 turtle.cfg 文件中加入了相应的条目,此字典将在导入模块时被读取并替代原有的英文版文档字符串。

在撰写本文档时已经有了德语和意大利语版的文档字符串字典。(更多需求请联系 glingl@aon.at)

如何配置 Screen 和 Turtle

内置的默认配置是模仿旧 turtle 模块的外观和行为,以便尽可能地与其保持兼容。

如果你想使用不同的配置,以便更好地反映此模块的特性或是更适合你的需求,例如在课堂中使用,你可以准备一个配置文件 turtle.cfg,该文件将在导入模块时被读取并根据其中的设定修改模块配置。

内置的配置对应以下的 turtle.cfg:

width = 0.5
height = 0.75
leftright = None
topbottom = None
canvwidth = 400
canvheight = 300
mode = standard
colormode = 1.0
delay = 10
undobuffersize = 1000
shape = classic
pencolor = black
fillcolor = black
resizemode = noresize
visible = True
language = english
exampleturtle = turtle
examplescreen = screen
title = Python Turtle Graphics
using_IDLE = False

选定条目的简短说明:

turtle.cfg 文件可以保存于 turtle 所在目录,当前工作目录也可以有一个同名文件。后者会重载覆盖前者的设置。

Lib/turtledemo 目录中也有一个 turtle.cfg 文件。你可以将其作为示例进行研究,并在运行演示时查看其作用效果 (但最好不要在演示查看器中运行)。

turtledemo --- 演示脚本集

turtledemo 包汇集了一组演示脚本。这些脚本可以通过以下命令打开所提供的演示查看器运行和查看:

python -m turtledemo

此外,你也可以单独运行其中的演示脚本。例如,:

python -m turtledemo.bytedesign

turtledemo 包目录中的内容:

演示脚本清单如下:

名称 描述 相关特性
bytedesign 复杂的传统海龟绘图模式 tracer(), delay, update()
chaos 绘制 Verhulst 动态模型,演示通过计算机的运算可能会生成令人惊叹的结果 世界坐标系
clock 绘制模拟时钟显示本机的当前时间 海龟作为表针, ontimer
colormixer 试验 r, g, b 颜色模式 ondrag() 当鼠标拖动
forest 绘制 3 棵广度优先树 随机化
fractalcurves 绘制 Hilbert & Koch 曲线 递归
lindenmayer 文化数学 (印度装饰艺术) L-系统
minimal_hanoi 汉诺塔 矩形海龟作为汉诺盘 (shape, shapesize)
nim 玩经典的“尼姆”游戏,开始时有三堆小棒,与电脑对战。 海龟作为小棒,事件驱动 (鼠标, 键盘)
paint 超极简主义绘画程序 onclick() 当鼠标点击
peace 初级技巧 海龟: 外观与动画
penrose 非周期性地使用风筝和飞镖形状铺满平面 stamp() 印章
planet_and_moon 模拟引力系统 复合开关, Vec2D
round_dance 两两相对并不断旋转舞蹈的海龟 复合形状, clone shapesize, tilt, get_shapepoly, update
sorting_animate 动态演示不同的排序方法 简单对齐, 随机化
tree 一棵 (图形化的) 广度优先树 (使用生成器) clone() 克隆
two_canvases 简单设计 两块画布上的海龟
wikipedia 一个来自介绍海龟绘图的维基百科文章的图案 clone(), undo()
yinyang 另一个初级示例 circle() 画圆

祝你玩得开心!

Python 2.6 之后的变化

Python 3.0 之后的变化

hibcz commented 6 months ago

我真的很需要看完这个(´இ皿இ`)

hibcz commented 6 months ago

turtle好简单但又好难