#18 turtle模块

前言

这一节继续记录模块,本节将记录Python中一个非常重要的画图模块——turtle,Here we go!

一、turtle模块

turtle(海龟)模块是Python中强大的内置画图模块,可以模拟真实的画图环境以及画图步骤来画图。通常,我们画图需要两种工具,一个是画布,另一个是画笔;在turtle中,同样需要这两种工具,首先来学习画布的设置

1. 画布

画布无非不过设置画布大小、背景颜色、画布在桌面的位置,turtle模块中,有两种画布的设置方法,需要时可将它们结合起来使用:

turtle.screensize(canvwidth=400, canvheight=300, bg=None)   「canvwidth表示画布宽、canvheight表示画布高、bg表示背景颜色」

In [19]: import turtle                             # 导入turtle模块

In [21]: turtle.screensize()                       # 设置默认尺寸
Out[21]: (400, 300)

In [22]: turtle.screensize(800,600)                # 将画布大小改为800x600,单位是像素

In [23]: turtle.screensize(800,600,bg=‘green‘)     # 也可以设置背景颜色

# 桌面上会出现一个画布,想要推出,输入turtle.done(),之后就可以点击画布上的x号关闭了

turtle.setup(width=0.5, height=0.75, startx=None, starty=None)   「width表示画布宽、height表示画布高、startx表示画布在桌面上的坐标x位置、starty表示画布在桌面上的坐标y位置」

In [26]: import turtle

In [28]: turtle.setup()                # 设置默认画布大小

In [29]: turtle.setup(800,600)         # 将画布大小改为800x600,单位是像素

In [30]: turtle.setup(0.5,0.5)         # 将画布大小改为占当前屏幕的0.5x0.5,无单位,这是一个比例

In [31]: turtle.setup(800,600,50,50)   # 设置画布初始位置为(50,50)

# 注意:当宽高为大于1的整数时,单位为像素;当宽高为小于1的小数时,为占当前屏幕的比例

如果要给有背景色的画布设置初始位置,则可以将上述两种方法结合起来使用:

In [34]: import turtle

In [36]: turtle.screensize(bg=‘green‘)   # 首先设置背景色

In [37]: turtle.setup(800,600,200,200)   # 再设置宽高和位置

2. 画笔

说完了画布设置,就剩下画笔了,画笔这一部分有些复杂,因为不仅要设置画笔的粗细颜色等,还要给画笔前进后退旋转等动作

2.1 画笔设置

turtle.pensize(width=None)   「width表示画笔的宽度」

In [39]: turtle.pensize(20)   # 设置画笔的宽度为20像素

turtle.pencolor(*args)   「可以传入多种参数,例如直接传入颜色‘green’,也可以传入RGB配色0.2,0.8,0.55」

In [42]: turtle.pencolor(‘green‘)   # 设置画笔颜色为绿色,直接传入颜色

In [43]: turtle.pencolor(0.2, 0.8, 0.55)   # 传入RGB配色

turtle.speed(speed=None)   「speed代表画笔速度」

In [45]: turtle.speed(5)   # 设置画笔速度为5

2.2 画笔动作

turtle.forward(distance) / turtle.fd(distance)  「画笔前进,distance代表距离」

turtle.backward(distance) / turtle.bk(distance) 「画笔后退,distance代表距离」

In [50]: turtle.fd(200)   # 画笔前进200像素

In [51]: turtle.bk(300)   # 画笔后退300像素

turtle.seth(degree) 「画笔运动的方向,degree代表角度」

In [77]: turtle.seth(90)   # 画笔运动方向为90度正方向

# 注意:这个是轴的正方向,不是画笔的指向,有正负之分,90表示逆时针90度,-90表示顺时针90度

turtle.left(degree) 「画笔逆时针旋转,degree代表角度」

turtle.right(degree) 「画笔顺时针旋转,degree代表角度」

In [52]: turtle.left(90)    # 画笔逆时针旋转90度

In [54]: turtle.right(90)   # 画笔顺时针旋转90度

turtle.goto(x,y) 「将画笔移动到坐标(x,y)处」

In [55]: turtle.goto(300,300)   # 将画笔移动到坐标(300,300)处

# 注意:假如画笔现在的位置为(10,10),使用上条命令后,画笔移动到(300,300)处,这时候会在画布上留下一条(10,10)到(300,300)的线段

turtle.penup() 「提起画笔」

In [56]: turtle.penup()     # 将画笔提起

# 这时候使用前进后退或者goto方法都不会在画布上留下痕迹

trutle.pendown() 「落下画笔」

In [57]: turtle.pendown()   # 落下画笔

# 之后使用前进后退或goto方法会在画布上留下痕迹

turtle.circle(radius, extent=None, steps=None) 「画圆方法,radius表示半径、extent表示圆的角度、steps表示圆内切多边形的边数」

In [59]: turtle.circle(50)           # 画一个半径为50像素的圆

In [60]: turtle.circle(60,180)       # 画一个半径为60像素的半圆

In [61]: turtle.circle(70,steps=6)   # 画一个内切于半径为70像素圆的6变形,注意:这是一个多边形,不是圆

turtle.hideturtle() 「隐藏画笔箭头」

turtle.showturtle() 「显示画笔箭头」

In [62]: turtle.hideturtle()   # 隐藏画笔箭头

In [63]: turtle.showturtle()   # 显示画笔箭头

# turtle模块默认箭头时显示的,可以将其隐藏

turtle.isvisile() 「返回画笔箭头是否存在的结果」

In [71]: turtle.isvisible()   # 返回True,说明画笔箭头可见
Out[71]: True

In [72]: turtle.hideturtle()

In [73]: turtle.isvisible()   # 返回False,说明画笔箭头不可见
Out[73]: False

 turtle.fillcolor(*args) 「填充颜色设置,可以直接传入颜色,也可以传入RGB参数」

In [65]: turtle.fillcolor(‘yellow‘)   # 设置填充颜色为黄色

turtle.begin_fill() 「开始填充图形」

turtle.end_fill() 「结束填充」

In [66]: turtle.begin_fill()   # 准备开始填充图形

In [67]: turtle.end_fill()     # 结束填充

turtle.flling() 「返回当前图形是否在填充的结果」

In [68]: turtle.filling()      # 返回False,说明当前图形不在填充
Out[68]: False

In [69]: turtle.begin_fill()

In [70]: turtle.filling()      # 返回True,说明当前图形正在填充
Out[70]: True

turtle.undo() 「撤销上一个画笔动作」

In [74]: turtle.undo()   # 撤销上一个画笔动作

turtle.clear() 「清空画布,但保留当前画笔状态和位置」

In [75]: turtle.clear()   # 清空画布,保留画笔状态和位置

turtle.reset() 「清空画布,画笔不再保留原有状态和位置」

In [76]: turtle.reset()   # 清空画布,不会保留画笔状态和位置

# 注意:画布属性没有被重置,依然保留原画布大小、背景色和画布位置

turtle.write(s[,font=("font-name",font_size,"font_type")])) 「画笔写字,s代表要写的字符串、font-name代表字体名称、font-size代表字体大小、font-type代表字体类型」

In [78]: turtle.write(‘MinuteSheep‘)    # 写下MinuteSheep

turtle.done() 「完成画作」

In [79]: turtle.done()   # 完成画作

# 此时可以点击图画上的x号关闭图画了

3. 示例

3.1 示例一:太阳花   「来自官网」

 1 from turtle import *
 2 color(‘red‘, ‘yellow‘)   # 画笔颜色为red,填充颜色为yellow
 3 begin_fill()   # 开始填充
 4 while True:
 5     forward(200)
 6     left(170)
 7     if abs(pos()) < 1:
 8         break
 9 end_fill()
10 done()

效果如图:

3.2 示例二:小猪佩奇   「来自:https://www.cnblogs.com/nowgood/p/turtle.html#_nav_11

  1 # coding:utf-8
  2 import turtle as t
  3 # 绘制小猪佩奇
  4 # =======================================
  5
  6 t.pensize(4)
  7 t.hideturtle()
  8 t.colormode(255)
  9 t.color((255, 155, 192), "pink")
 10 t.setup(840, 500)
 11 t.speed(10)
 12
 13 # 鼻子
 14 t.pu()
 15 t.goto(-100,100)
 16 t.pd()
 17 t.seth(-30)
 18 t.begin_fill()
 19 a = 0.4
 20 for i in range(120):
 21     if 0 <= i < 30 or 60 <= i < 90:
 22         a = a+0.08
 23         t.lt(3)  # 向左转3度
 24         t.fd(a)  # 向前走a的步长
 25     else:
 26         a = a-0.08
 27         t.lt(3)
 28         t.fd(a)
 29         t.end_fill()
 30
 31 t.pu()
 32 t.seth(90)
 33 t.fd(25)
 34 t.seth(0)
 35 t.fd(10)
 36 t.pd()
 37 t.pencolor(255, 155, 192)
 38 t.seth(10)
 39 t.begin_fill()
 40 t.circle(5)
 41 t.color(160, 82, 45)
 42 t.end_fill()
 43
 44 t.pu()
 45 t.seth(0)
 46 t.fd(20)
 47 t.pd()
 48 t.pencolor(255, 155, 192)
 49 t.seth(10)
 50 t.begin_fill()
 51 t.circle(5)
 52 t.color(160, 82, 45)
 53 t.end_fill()
 54
 55 # 头
 56 t.color((255, 155, 192), "pink")
 57 t.pu()
 58 t.seth(90)
 59 t.fd(41)
 60 t.seth(0)
 61 t.fd(0)
 62 t.pd()
 63 t.begin_fill()
 64 t.seth(180)
 65 t.circle(300, -30)
 66 t.circle(100, -60)
 67 t.circle(80, -100)
 68 t.circle(150, -20)
 69 t.circle(60, -95)
 70 t.seth(161)
 71 t.circle(-300, 15)
 72 t.pu()
 73 t.goto(-100, 100)
 74 t.pd()
 75 t.seth(-30)
 76 a = 0.4
 77 for i in range(60):
 78     if 0 <= i < 30 or 60 <= i <90:
 79         a = a+0.08
 80         t.lt(3)  # 向左转3度
 81         t.fd(a)  # 向前走a的步长
 82     else:
 83         a = a-0.08
 84         t.lt(3)
 85         t.fd(a)
 86         t.end_fill()
 87
 88 # 耳朵
 89 t.color((255, 155, 192), "pink")
 90 t.pu()
 91 t.seth(90)
 92 t.fd(-7)
 93 t.seth(0)
 94 t.fd(70)
 95 t.pd()
 96 t.begin_fill()
 97 t.seth(100)
 98 t.circle(-50, 50)
 99 t.circle(-10, 120)
100 t.circle(-50, 54)
101 t.end_fill()
102
103 t.pu()
104 t.seth(90)
105 t.fd(-12)
106 t.seth(0)
107 t.fd(30)
108 t.pd()
109 t.begin_fill()
110 t.seth(100)
111 t.circle(-50, 50)
112 t.circle(-10, 120)
113 t.circle(-50, 56)
114 t.end_fill()
115
116 #眼睛
117 t.color((255, 155, 192), "white")
118 t.pu()
119 t.seth(90)
120 t.fd(-20)
121 t.seth(0)
122 t.fd(-95)
123 t.pd()
124 t.begin_fill()
125 t.circle(15)
126 t.end_fill()
127
128 t.color("black")
129 t.pu()
130 t.seth(90)
131 t.fd(12)
132 t.seth(0)
133 t.fd(-3)
134 t.pd()
135 t.begin_fill()
136 t.circle(3)
137 t.end_fill()
138
139 t.color((255, 155, 192), "white")
140 t.pu()
141 t.seth(90)
142 t.fd(-25)
143 t.seth(0)
144 t.fd(40)
145 t.pd()
146 t.begin_fill()
147 t.circle(15)
148 t.end_fill()
149
150 t.color("black")
151 t.pu()
152 t.seth(90)
153 t.fd(12)
154 t.seth(0)
155 t.fd(-3)
156 t.pd()
157 t.begin_fill()
158 t.circle(3)
159 t.end_fill()
160
161 # 腮
162 t.color((255, 155, 192))
163 t.pu()
164 t.seth(90)
165 t.fd(-95)
166 t.seth(0)
167 t.fd(65)
168 t.pd()
169 t.begin_fill()
170 t.circle(30)
171 t.end_fill()
172
173 # 嘴
174 t.color(239, 69, 19)
175 t.pu()
176 t.seth(90)
177 t.fd(15)
178 t.seth(0)
179 t.fd(-100)
180 t.pd()
181 t.seth(-80)
182 t.circle(30, 40)
183 t.circle(40, 80)
184
185 # 身体
186 t.color("red", (255, 99, 71))
187 t.pu()
188 t.seth(90)
189 t.fd(-20)
190 t.seth(0)
191 t.fd(-78)
192 t.pd()
193 t.begin_fill()
194 t.seth(-130)
195 t.circle(100,10)
196 t.circle(300,30)
197 t.seth(0)
198 t.fd(230)
199 t.seth(90)
200 t.circle(300,30)
201 t.circle(100,3)
202 t.color((255,155,192),(255,100,100))
203 t.seth(-135)
204 t.circle(-80,63)
205 t.circle(-150,24)
206 t.end_fill()
207
208 # 手
209 t.color((255,155,192))
210 t.pu()
211 t.seth(90)
212 t.fd(-40)
213 t.seth(0)
214 t.fd(-27)
215 t.pd()
216 t.seth(-160)
217 t.circle(300,15)
218 t.pu()
219 t.seth(90)
220 t.fd(15)
221 t.seth(0)
222 t.fd(0)
223 t.pd()
224 t.seth(-10)
225 t.circle(-20,90)
226
227 t.pu()
228 t.seth(90)
229 t.fd(30)
230 t.seth(0)
231 t.fd(237)
232 t.pd()
233 t.seth(-20)
234 t.circle(-300,15)
235 t.pu()
236 t.seth(90)
237 t.fd(20)
238 t.seth(0)
239 t.fd(0)
240 t.pd()
241 t.seth(-170)
242 t.circle(20,90)
243
244 # 脚
245 t.pensize(10)
246 t.color((240,128,128))
247 t.pu()
248 t.seth(90)
249 t.fd(-75)
250 t.seth(0)
251 t.fd(-180)
252 t.pd()
253 t.seth(-90)
254 t.fd(40)
255 t.seth(-180)
256 t.color("black")
257 t.pensize(15)
258 t.fd(20)
259
260 t.pensize(10)
261 t.color((240, 128, 128))
262 t.pu()
263 t.seth(90)
264 t.fd(40)
265 t.seth(0)
266 t.fd(90)
267 t.pd()
268 t.seth(-90)
269 t.fd(40)
270 t.seth(-180)
271 t.color("black")
272 t.pensize(15)
273 t.fd(20)
274
275 # 尾巴
276 t.pensize(4)
277 t.color((255, 155, 192))
278 t.pu()
279 t.seth(90)
280 t.fd(70)
281 t.seth(0)
282 t.fd(95)
283 t.pd()
284 t.seth(0)
285 t.circle(70, 20)
286 t.circle(10, 330)
287 t.circle(70, 30)
288 t.done()

效果如图:

原文地址:https://www.cnblogs.com/minutesheep/p/10356023.html

时间: 2024-08-30 00:48:46

#18 turtle模块的相关文章

python绘制图形(Turtle模块)

用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. 1 from turtle import * #引入turtle模块 2 color('red', 'yellow') #设置绘制的颜色和填充颜色 3 4 # 海龟设置 5 hideturtle() # 隐藏箭头 6 speed(10) # 设置速度 7 # 前进后退,左转右转 8 fd(100) # 前进100像素(forward(1

用Python的Turtle模块绘制五星红旗

Edit 用Python的Turtle模块绘制五星红旗 在Udacity上课时学到了python的turtle方法,这是一个很经典的用来教小孩儿编程的图形模块,最早起源于logo语言.python本身内置了这个模块,其可视化的方法可以帮助小孩儿对编程的一些基本理念有所理解. 在作业提交的论坛里看到很多turtle画出来的精美图形,想不出什么要画的东西,于是决定拿五星红旗来练练手. 前期准备 五星红旗绘制参数 Turtle官方文档 turtle的基本操作 # 初始化屏幕 window = turt

使用turtle模块绘制多边图形

python 版本:3.4.3 import 模块:turtle 使用turtle模块绘制多边图形,代码如下:  #-*- charset:utf-8 -*- import turtle #设置画笔笔迹宽度 turtle.pensize(3) #画三边形 turtle.color("red") turtle.penup() turtle.goto(-200,-50) turtle.pendown() turtle.circle(40, steps=3) #画四边形 turtle.col

Turtle模块,一个超精简但功能齐全的绘图包

先上官方链接https://docs.python.org/3.3/library/turtle.html 再上一个GitHub上别人做的一个小程序,画小猪佩琦的,里面用到了大量常用的turtle接口.github链接https://github.com/Monster12138/- Turtle模块,一个超精简但功能齐全的绘图包 原文地址:https://www.cnblogs.com/cia2018/p/10264829.html

9 Apr 18 shelve模块 xml模块 re模块

9 Apr 18 上节课复习: 一.shelve模块 Shelve(了解),是更高程度的封装.使用时只针对之前设计生成的文件,可以无视不同平台自动生成的其他文件.   Json的中间格式为字符串,用w写入文件 Pickle的中间格式为bytes,用b写入文件 序列化时更常用Json   import shelve info1={'age':18,'height':180,'weight':80} info2={'age':73,'height':150,'weight':80}   d=shel

利用turtle模块画图

代码: import turtle #导入画图模块,查看已安装的模块dir('modules')或者help('modules')命令,查看模块详情help('turtle') t=turtle.Turtle() #调用模块里面的Turtle工具,调用模块:模块名.函数名 turtle.Turtle() t.speed(0) #画笔速度1-9依次变快,0为最快速度 def setpen(x,y): t.penup() t.goto(x,y) t.pendown() t.setheading(0)

python的turtle模块画折线图

代码如下: import turtle yValues = [10.0,7.4,6.4,5.3,4.4,3.7,2.6] def main(): t = turtle.Turtle() t.hideturtle() drawLine(t,0,0,300,0) #画x轴 drawLine(t,0,0,0,175) #画y轴 #画折线 for i in range(6): drawLineWithDots(t,40 + (40 * i),15 * yValues[i],40 + (40 * (i+1

turtle模块实现多边形

import turtle def square(length,n):#边长和边数 bob = turtle.Turtle() for i in range(n): bob.fd(length) bob.lt(360/n)#每次所转角度 turtle.mainloop() square(70,6) <a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=14810f366fd210392f3943e7a1f03d

使用Python的turtle模块画出简单的柱状图

代码如下: import turtle heights = [856, 420,360,260,205] def main(): t = turtle.Turtle() t.hideturtle() for i in range(5): drawFilledRectangle(t,-200+(76*i),0,76,heights[i]/4,"black","light blue") displayText(t) def drawFilledRectangle(t,x