#18 turtle模塊

前言

這一節繼續記錄模塊,本節將記錄Python中一個很是重要的畫圖模塊——turtle,Here we go!html

1、turtle模塊

turtle(海龜)模塊是Python中強大的內置畫圖模塊,能夠模擬真實的畫圖環境以及畫圖步驟來畫圖。一般,咱們畫圖須要兩種工具,一個是畫布,另外一個是畫筆;在turtle中,一樣須要這兩種工具,首先來學習畫布的設置ide

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的小數時,爲佔當前屏幕的比例

若是要給有背景色的畫布設置初始位置,則能夠將上述兩種方法結合起來使用:spa

In [34]: import turtle

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

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

2. 畫筆

說完了畫布設置,就剩下畫筆了,畫筆這一部分有些複雜,由於不只要設置畫筆的粗細顏色等,還要給畫筆前進後退旋轉等動做code

2.1 畫筆設置orm

turtle.pensize(width=None)   「width表示畫筆的寬度」htm

In [39]: turtle.pensize(20)   # 設置畫筆的寬度爲20像素

turtle.pencolor(*args)   「能夠傳入多種參數,例如直接傳入顏色‘green’,也能夠傳入RGB配色0.2,0.8,0.55」blog

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()

效果如圖: 

相關文章
相關標籤/搜索