(1).介紹html
turtle庫也叫海龜庫,是turtle繪圖體系的Python實現。turtle庫是Python語言的標準庫之一,是入門級的圖形繪製函數庫。python
turtle繪圖體系:也叫海龜繪圖系統,它是在1969年誕生,主要用於程序設計入門的一種繪圖方式。shell
Python計算生態 = 標準庫 + 第三方庫dom
標準庫:隨解釋器直接安裝到操做系統中的功能模塊。ide
第三方庫:須要通過安裝才能使用的功能模塊。函數
turtle官方文檔:https://docs.python.org/3/library/turtle.html佈局
(2).原理spa
turtle(海龜)是真實的存在,能夠想象成一隻海龜在窗體正中間,由程序控制在畫布上游走,走過的軌跡造成了繪製的圖形,能夠變換海龜的顏色和寬度等。這裏海龜就是咱們的畫筆。操作系統
(3).turtle的繪圖窗體佈局.net
繪製turtle圖形首先須要一個繪圖窗體,在操做系統上表現爲一個窗口,它是turtle的一個畫布空間。在窗口中使用的最小單位是像素,例如要繪製一個100單位長度的直線,就是指100像素長的直線。
在一個操做系統上,將顯示器的左上角座標定義爲(0,0),那麼咱們將窗體的左上角定義爲turtle繪圖窗體的座標原點,相對於整個顯示器座標爲(startx,starty)。這裏可使用turtle.setup(width,height,startx,starty)來設置啓動窗體的位置和大小,固然setup()函數並非必須的。並且在setup()函數中startx和starty參數是可選的,若是沒有指定這兩個參數,那麼系統會默認該窗體在顯示器的正中心。
參數說明:
width和height:若是是整數,則爲像素大小;若是是浮點數則爲屏幕的百分比。width默認爲屏幕的50%,height默認爲屏幕的70%。
startx和starty:若是爲正,則爲距屏幕左側或頂部的像素長度;若是爲負,則爲舉例屏幕右側或底部的像素長度;若是爲None,則水平或垂直居中。
更多窗體控制請查看turtle官方文檔:https://docs.python.org/3/library/turtle.html。
(4).turtle空間座標體系
在turtle窗體內部造成了一個空間座標體系,包含絕對座標和海龜座標兩種。
1)絕對座標
對於絕對座標來說,turtle也就是海龜最開始出現的地方,即畫布的正中心做爲絕對座標的(0,0)。海龜的運行方向向着畫布的右側,因此整個窗體的右方向爲x軸,上方向爲y軸,由此構成了絕對座標系。
絕對座標系在繪圖時常常用到,與之相關的最重要的函數是turtle.goto(x,y),該函數是讓任意位置的海龜到達指定位置。
2)海龜座標
對於海龜座標來說,不管海龜朝向什麼方向,海龜當前行進方向都叫前進方向,反方向是後退方向,左側是左側方向,右側是右側方向
與之相關的經常使用函數有:turtle.fd(d),前進d像素距離;turtle.bk(d),後退d像素距離,海龜方向不變;turtle.circle(r,angle),以海龜左側爲原點,半徑爲r像素,行進angle度圓形弧度,而且海龜方向改變angle度,若是沒有angle,那麼行進一個完整的圓。注意:d、r、angle容許負數,意爲反方向
(5).turtle角度座標體系
turtle創建了一個空間座標體系,那麼在空間座標中,海龜行進的方向也有一個角度,一樣分爲絕對角度和海龜角度。
1)絕對角度
對於絕對角度來說,絕對座標的x正軸表示0度或360度,y正軸表示90度或-270度,x負軸表示180度或-180度,y負軸表示270度或-90度。
與之相關的經常使用函數爲turtle.seth(angle),用於改變海龜行進方向,只改變方向不行進。
2)海龜角度
對於海龜角度來說,爲了更好的改變海龜的行進方向,使用左右的方式來改變它的行進角度。
與之相關的函數有:turtle.left(angle)和turtle.right(angle),分別讓海龜向左或向右改變行進方向。
(6).turtle的RGB色彩體系
turtle庫中採用了計算機最多見的RGB色彩體系,取值範圍能夠是0-255的整數,也能夠是0-1的小數。
經常使用的RGB色彩以下:
英文名稱 | RGB整數值 | RGB小數值 | 中文名稱 |
white | 255,255,255 | 1,1,1 | 白色 |
yellow | 255,255,0 | 1,1,0 | 黃色 |
magenta | 255,0,255 | 1,0,1 | 洋紅 |
cyan | 0,255,255 | 0,1,1 | 青色 |
blue | 0,0,255 | 0,0,1 | 藍色 |
black | 0,0,0 | 0,0,0 | 黑色 |
seashell | 255,245,238 | 1,0.96,0.93 | 海貝色 |
gold | 255,215,0 | 1,0.84,0 | 金色 |
pink | 255,192,203 | 1,0.75,0.80 | 粉紅色 |
brown | 165,42,42 | 0.65,0.16,0.16 | 棕色 |
purple | 160,32,240 | 0.63,0.13,0.94 | 紫色 |
tomato | 255,99,71 | 1,0.39,0.28 | 番茄色 |
turtle庫默認採用RGB的小數值來表示顏色,固然也可使用函數turtle.colormode(mode)來切換RGB數值模式。當mode爲1.0時表示採用小數值來表現RGB,當mode爲255時表示採用整數值來表現RGB。
與顏色設置相關的函數:turtle.color()、turtle.pencolor()、turtle.fillcolor(),因爲設置畫筆顏色和填充色;還有turtle.bgcolor(),設置窗體背景色。
(7).turtle經常使用函數
注意:設置參數後,若是沒有取消或從新設置,那麼當前程序內一直有效。
1)畫筆控制函數
turtle.penup()、turtle.pu()、turtle.up():擡筆,移動時不繪圖
turtle.pendown()、turtle.pd()、turtle.down():落筆,移動時繪圖
turtle.pensize(width)、turtle.width(width):畫筆寬度
turtle.pencolor(*args):若是不給參數,則返回當前畫筆顏色,給出參數則是設定畫筆顏色。設置顏色有三種方式的參數,pencolor(colorstring)、pencolor((r,g,b))和pencolor(r,g,b)
2)運動控制函數
turtle.forward(distance)、turtle.fd(distance):前進distance像素
turtle.backward(distance)、turtle.bk(distance)、turtle.back(distance):後退distance像素
turtle.circle(r,angle):以畫筆(海龜)左側爲圓心,半徑爲r像素,畫angle度的圓形。注意:海龜方向同時發生angle度變化
turtle.goto(x,y)、setpos(x,y)、setposition(x,y):由當前座標前往指定座標,這裏使用絕對座標,但畫筆方向不會改變
3)方向控制函數
turtle.setheading(angle)、turtle.seth(angle):以絕對角度改變方向
turtle.left(angle)、turtle.lt(angle):以海龜角度向左改變方向
turtle.right(angle)、turtle.rt(angle):以海龜角度向右改變方向
4)更多
更多函數請前往官方文檔查看:https://docs.python.org/3/library/turtle.html
(8).實例
1)繪製一個正方形
import turtle turtle.pensize(2) for i in range(4): turtle.fd(150) turtle.left(90) turtle.done()
效果圖:
2)繪製一個正六邊形
import turtle turtle.pensize(2) for i in range(6): turtle.fd(150) turtle.left(60) turtle.done()
效果圖
3)繪製一個如圖所示的風輪
import turtle turtle.pensize(2) for i in range(4): turtle.fd(150) turtle.left(90) turtle.circle(150,-45) turtle.goto(0,0) turtle.left(45)
4)繪製一個如圖所示的太陽花
from turtle import * color('red', 'yellow') #設置畫筆顏色爲紅色,填充色爲黃色 begin_fill() #開始填充,必須與end_fill()一塊兒使用 while True: #循環,這裏是死循環,經過下方if語句控制跳出循環 forward(200) #前進200像素 left(170) #海龜角度,左轉170度 if abs(pos()) < 1: #abs()返回絕對值,pos()返回當前座標點,合起來是(0,0)到當前座標的長度,用於判斷是否回到(0,0) break #跳出循環 end_fill() #結束填充,運行到這裏纔會填充顏色 done() #結束後停留在當前窗口
5)繪製一個玫瑰花
import turtle turtle.speed(5) # 設置初始位置 turtle.penup() turtle.goto(0,200) turtle.pendown() # 花蕊 turtle.fillcolor("red") turtle.begin_fill() turtle.circle(10,180) turtle.circle(25,110) turtle.left(50) turtle.circle(60,45) turtle.circle(20,170) turtle.right(24) turtle.fd(30) turtle.left(10) turtle.circle(30,110) turtle.fd(20) turtle.left(40) turtle.circle(90,70) turtle.circle(30,150) turtle.right(30) turtle.fd(15) turtle.circle(80,90) turtle.left(15) turtle.fd(45) turtle.right(165) turtle.fd(20) turtle.left(155) turtle.circle(150,80) turtle.left(50) turtle.circle(150,90) turtle.end_fill() # 花瓣1 turtle.left(150) turtle.circle(-90,70) turtle.left(20) turtle.circle(75,105) turtle.setheading(60) turtle.circle(80,98) turtle.circle(-90,40) # 花瓣2 turtle.left(180) turtle.circle(90,40) turtle.circle(-80,98) turtle.setheading(-83) # 葉子1 turtle.fd(30) turtle.left(90) turtle.fd(25) turtle.left(45) turtle.fillcolor("green") turtle.begin_fill() turtle.circle(-80,90) turtle.right(90) turtle.circle(-80,90) turtle.end_fill() turtle.right(135) turtle.fd(60) turtle.left(180) turtle.fd(85) turtle.left(90) turtle.fd(80) # 葉子2 turtle.right(90) turtle.right(45) turtle.fillcolor("green") turtle.begin_fill() turtle.circle(80,90) turtle.left(90) turtle.circle(80,90) turtle.end_fill() turtle.left(135) turtle.fd(60) turtle.left(180) turtle.fd(60) turtle.right(90) turtle.circle(200,60) turtle.done()
效果圖以下:
6)櫻花樹(大佬NB!!)
import turtle as T import random import time # 畫櫻花的軀幹(60,t) def Tree(branch, t): time.sleep(0.0005) if branch > 3: if 8 <= branch <= 12: if random.randint(0, 2) == 0: t.color('snow') # 白 else: t.color('lightcoral') # 淡珊瑚色 t.pensize(branch / 3) elif branch < 8: if random.randint(0, 1) == 0: t.color('snow') else: t.color('lightcoral') # 淡珊瑚色 t.pensize(branch / 2) else: t.color('sienna') # 赭(zhě)色 t.pensize(branch / 10) # 6 t.forward(branch) a = 1.5 * random.random() t.right(20 * a) b = 1.5 * random.random() Tree(branch - 10 * b, t) t.left(40 * a) Tree(branch - 10 * b, t) t.right(20 * a) t.up() t.backward(branch) t.down() # 掉落的花瓣 def Petal(m, t): for i in range(m): a = 200 - 400 * random.random() b = 10 - 20 * random.random() t.up() t.forward(b) t.left(90) t.forward(a) t.down() t.color('lightcoral') # 淡珊瑚色 t.circle(1) t.up() t.backward(a) t.right(90) t.backward(b) # 繪圖區域 t = T.Turtle() # 畫布大小 w = T.Screen() t.hideturtle() # 隱藏畫筆 t.getscreen().tracer(5, 0) w.screensize(bg='wheat') # wheat小麥 t.left(90) t.up() t.backward(150) t.down() t.color('sienna') # 畫櫻花的軀幹 Tree(60, t) # 掉落的花瓣 Petal(200, t) w.exitonclick()
效果圖以下:
參考:https://www.cnblogs.com/chen0307/articles/9645138.html
https://blog.csdn.net/as_csdn/article/details/93086075
http://www.javashuo.com/article/p-rkczboot-d.html
https://blog.csdn.net/sandalphon4869/article/details/99443949