Python标准库: turtle--海龟绘图。
2024-09-05 14:05:17
turtle
--- 海龟绘图
(点击查看官方文档。)
简介
import turtle # 调用该库。Turtle的实例对象,默认命名为turtle。
turtle.forward(10) from turtle import * #调用方法时,可以省略写turtle对象。
之所以叫turtle,其实就是一个想象,在绘图区的箭头作为一支笔,用它来绘制图形。
turtle模块使用tkinter
实现基本图形界面,因此需要安装了 Tk 支持的 Python 版本。
python3 -m tkinter #如果有这个模块会弹出一个小窗口。
turtle模块支持面向对象和过程,接口有2+2个类:
- TurtleScreen类:定义图形窗口作为绘图场所。
- 派生的Screen子类,产生一个单例对象。
- RawTurtle(也叫RawPen)类:定义如何绘图。
- 派生的子类Turtle(也叫Pen): 该类的对象在Screen实例上绘图。
上面TurtleScreen/Screen, RawTurtle/Turtle 的所有方法存在对应的函数,即作为面向过程的接口组成部分。
过程式接口提供与 Screen
和 Turtle
类的方法相对应的函数。函数名与对应的方法名相同。
- 当 Screen 类的方法对应函数被调用时会自动创建一个 Screen 对象。
- 当 Turtle 类的方法对应函数被调用时会自动创建一个 (匿名的) Turtle 对象。
⚠️官方文档非常详细。还包括大量演示脚本。
例子
例子,画五角星,五个。
from turtle import * def draw(x, y):
penup() #笔和纸分开,移动不绘画。
goto(x ,y)
pendown() setheading(0)
for i in range(5):
forward(40)
right(144) for x in range(0, 250, 50): #range(start, stop, step)
draw(x, 0)
官方第一个例子:
from turtle import * color('red', 'yellow')
begin_fill() while True:
forward(200)
left(170)
if abs(pos()) < 1:
break end_fill()
done()
这里的abs(pos())为什么返回数值并和1比较?
看这里源代码:https://github.com/python/cpython/blob/master/Lib/turtle.py#L266
class Vec2D(tuple):
def __abs__(self):
return (self[0]**2 + self[1]**2)**0.5
⚠️x^2 等同于 x**2 。
pos()返回的对象的类型:
>>> type(pos())
<class 'turtle.Vec2D'>
>>> dir(pos())
['__abs__', '__add__',...后面略
可以知道Vec2D实例对象有它自己的方法_abs_。
所以,上面的代码当回到(0, 0)即最开始的位置时,abs(pos()) 肯定小于1。中断循环。
最新文章
- how-to-install-siege-on-centos-7
- iOS边练边学--iOS中的XML数据解析
- 取地址符:&;
- OnePlus安装Kali-NetHunter
- homework-附加题:第12章基本数据类型阅读总结
- ios开发 block语句块
- Android---OpenGL ES之添加动作
- tcpdump VS tshark用法(转)
- Linux命令学习篇0——原产地
- YII 1.0 缓存使用
- 成为Java顶尖程序员 ,看这11本书就够了(转)
- 脱掉Golang的第一层衣裳 golang入坑系列
- 【转】mip-semi-fixed 走走又停停
- Javascript模块化简史
- JavaEE第六周
- redux源码图解:createStore 和 applyMiddleware
- mysql 字段指定值靠前排序方法,多字段排序排序方法
- 谷歌迂回入华:Waymo无人车抢先进驻上海!
- esp8266(2) 智能配置
- 2018.11.02 NOIP模拟 优美的序列(数论+单调栈/链表)
热门文章
- python之pandas学习笔记-pandas数据结构
- day38 各种队列、Event事件、协程、猴子补丁
- Git 的配置
- Flink与其他流处理方式的对比分析
- Redis(1.13)Redis cluster 分布式集群手动配置
- 什么是时序时空数据库TSDB
- commons-lang3依赖下的StringUtils类的isEmpty()方法和isBlank()方法
- jQuery添加/删除Select的Option项
- 石子合并(直线版+环形版)&;(朴素写法+四边形优化+GarsiaWachs算法)
- DRF cbv源码分析 restful规范10条 drf:APIView的源码 Request的源码 postman的安装和使用