turtle庫是python的基礎繪圖庫
這個庫被介紹為一個最常用的用來給初學者介紹編程知識的方法庫,其主要是用於程序設計入門,是標準庫之一,利用turtle可以製作很多複雜的繪圖。
turtle原理理解turtle名稱含義為「海龜」,我們想像一隻海龜,位於顯示器上窗體的正中心,在畫布上遊走,它遊走的軌跡就形成了繪製的圖形。
海龜的運動是由程序控制的,它可以變換顏色,改變大小(寬度)等。
【導入標準庫Turtle方法】
1、import <庫名>
例如:import turtle
如果需要使用庫函數中的函數,需要使用:<庫名>.<函數名>
例如:import turtle
turtle.fd(100)
2、from <庫名> import <函數名>
from <庫名> import *, 使用這種方式時,直接使用<函數名>
例如: >>>from turtle import *
fd(100)
兩種方式的區別:如果採用第一種方式,用戶自定義的函數名字可以和庫中函數一樣,例如,程序中可以定義自己的fd()函數。如果採用第二種方式,用戶程序中不能用函數庫中的名字定義函數。例如:程序中不能定義新的fd()函數,因為庫turtle庫中的fd()函數也是直接通過fd()調用。
turtle.setup()函數用於啟動一個圖形窗口,它有四個參數,turtle.setup(width,height,startx,starty),分別是:啟動窗口的寬度和高度,表示窗口啟動時,窗口左上角在屏幕中的坐標位置。向左為橫坐標,向下為縱坐標。
turtle.pensize()函數表示運動軌跡的寬度。它包含一個輸入參數,即多少像素。
turtle.pencolor()函數表示運動軌跡的顏色。它包含一個輸入參數,
即想要的顏色。
turtle.seth()函數表示啟動時運動的方向。它包含一個輸入參數,是角度值。
turtle.circle()函數表示繪製的圖形為圓形,它包含兩個參數,rad描述軌跡半徑的位置,angle表示沿著圓形爬行的弧度值。
turtle.fd()函數也可以用turtle.forward()表示,表示向前直線移動,它有一個參數表示移動的距離。
3、import <庫名> as t
t 相當於turtle的別名,turtle的調用可以用t來簡化表示,減少文字的輸入量。
如果需要使用庫函數中的函數,需要使用:<別名>.<函數名>
例如:import turtle
t.fd(100)
t.color("red")
【繪圖窗體】turtle.setup(width,height,startx,starty)
使用turtle的setup函數,可以在屏幕中生成一個窗口(窗體),設置窗體的大小和位置,這個窗口就是畫布的範圍。
畫布的最小單位是像素,屏幕的坐標系以左上角為原點(0,0)分布。
setup的四個參數分別指的是
setup()也是可選的,只是需要定義窗口的大小及位置是才使用。
turtle空間坐標體系絕對坐標以屏幕中間為原點(0,0),形成四象限的坐標體系。
可以使用turtle.goto(x,y)方法來讓海龜沿著絕對坐標進行運動:
import turtle
turtle.goto(100,100)
turtle.goto(100,-100)
turtle.goto(-100,-100)
turtle.goto(-100,100)
turtle.goto(0,0)
海龜坐標
是以海龜的視角的坐標體系,分為四個方向:
使用以下方法可以使海龜在指向的方向上移動、轉向等
turtle.fd(distance) #前進
turtle.bk(distance) #後退
turtle.rt(angle) #右轉
turtle.lt(angle) #左轉
import turtle
turtle.left(45)
turtle.fd(150)
turtle.right(135)
turtle.fd(300)
turtle.left(135)
turtle.fd(150)
通過這幾句可以在畫布上實現一個斜著的Z字。
turtle角度坐標體系絕對角度坐標絕對坐標體系下 有一個絕對角度體系
使用turtle.seth()方法改變海龜的朝向,但不運動
海龜角度坐標海龜的角度坐標體系下,只分左轉和右轉兩種情況。
使用以下方法來改變它的角度:
turtle.left(angle) #向海龜左邊改變運行方向
turtle.right(angle) #向海龜右邊改變運行方向
三種基礎顏色:red green blue構成萬物色。
能夠覆蓋視力能感知的所有顏色。
在計算機RGB色彩體系中,每個基礎顏色的取值範圍是0-255的整數,或0-1的小數
常用顏色:
使用turtle.colormode(mode)來調整海龜的顏色,默認採用RGB小數值,可以切換為整數值
mode 小數值模式:1.0
mode 整數值模式:255
turtle.penup() # turtle.pu() 抬起畫筆,不再畫線
turtle.pendown() # turtle.pd() 落下畫筆,繼續畫線
turtle.pensize(width) # turtle.width(width) 設置畫筆的寬度
turtle.pencolor(color) # color 為 色彩RGB值 設置畫筆的顏色
# color參數 有三種形式
# 顏色字符串
turtle.pencolor('purple') # 小寫
# RGB小數值
turtle.pencolor(0.63,0.13,0.94) #三個小數值
# RGB數值元組
turtle.pencolor((0.63,0.13,0.94)) # 一個三元素元組
控制畫筆的行進:走直線&走曲線
# 直線
turtle.forward(d) # turtle.fd(d) d為參數行進距離 控制畫筆向前走d長度的直線 d可以為負數,表示向後運動
# 曲線
turtle.circle(r,extent=None) # 根據半徑r繪製extent角度的弧形 r 默認圓心在畫筆左端點距離r長度的地方 extent是繪製的角度,默認繪製完整的圓形
turtle.circle(100) # 在畫筆的左側(也就是上方)100距離的位置上然後以弧形來運動,沒有設置extent參數,因此會繪製整個圓形
turtle.circle(-100,90) #圓心在畫筆的右側100距離(也就是下方)上,然後extent為90,因此繪製一個90度的弧形。
方向控制函數
控制h畫筆面對的方向:絕對角度 & 畫筆角度
# 絕對角度轉向函數
turtle.setheading(angle) # turtle.seth(angle) 改變畫筆的面向的角度( 初始方向是畫布的正右方) 參數angle是絕對坐標系的角度
#畫筆角度轉向函數
turtle.left(angle) # 向左轉angle度
turtle.right(angle) # 向右轉angle度
向控制函數隻改方向,但是不會動,運動由運動控制函數實現。
熟悉以上這些,就能完成基本的繪圖了
樣例:
#PythonDraw.py
import turtle
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
turtle.circle(40, 80)
turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)
turtle.done()
下面的案例我們會剖析繪製一片樹林的Turtle繪圖程序:
數學幾何模型1-2:
(1)先來繪製一個等邊三角形:
from turtle import *
goto(30,0)
left(120)
forward(60)
left(120)
forward(60)
left(120)
forward(60)
其中:
left(120) 、 forward(60) 有三個重複的部分,代碼可以用循環簡化化:
from turtle import *
penup() #抬筆
goto(30,0)
pendown() #落筆
for t in range(3):
left(120)
forward(60)
形狀如下:
(2)先來繪製三個等邊三角形(向上方向):
代碼改進:
from turtle import *
penup() #抬筆
goto(30,0)
pendown() #落筆
for t in range(3):
left(120)
forward(60)
goto(30,15)
pendown() #落筆
for t in range(3):
left(120)
forward(60)
goto(30,30)
pendown() #落筆
for t in range(3):
left(120)
forward(60)
發現有連筆現象,添加2處代碼:
細細看上面的代碼,發現A、B、C三個語句塊有重複的情況:
我們來用一個循環簡化一下:
(3)繪製樹幹,幾何模型
from turtle import *
for z in range(3):
penup() #抬筆
goto(30,z*15)
pendown() #落筆
for t in range(3):
left(120) #左轉120度
forward(60) #前進60像素
penup()
goto(7,0)
pendown()
right(90)
forward(28)
right(90)
forward(14)
right(90)
forward(28)
right(90)
forward(14)
上面代碼有重複,簡化它:
from turtle import *
for z in range(3):
penup() #抬筆
goto(30,z*15)
pendown() #落筆
for t in range(3):
left(120) #左轉120度
forward(60) #前進60像素
penup()
goto(7,0)
pendown()
for t in range(2):
right(90)
forward(28)
right(90)
forward(14)
(4)一起填充點顏色吧,添加代碼加黑的。
from turtle import *
color("black","green") #輪廓顏色為黑色,填充顏色為綠色
pensize(5)
for z in range(3):
penup() #抬筆
goto(30,z*15)
pendown() #落筆
begin_fill()
for t in range(3):
left(120) #左轉120度
forward(60) #前進60像素
end_fill()
penup()
goto(7,0)
pendown()
color("black","brown") #輪廓顏色為黑色,填充顏色為棕色
begin_fill()
for t in range(2):
right(90)
forward(28)
right(90)
forward(14)
end_fill()
動圖演示如下:
(5)畫一排樹,修改代碼加粗(第一個加粗循環後面的代碼,整體縮進一個Tab位置)
from turtle import *
pensize(5)
speed(9)
for x in range(-1,2):
for z in range(3):
penup() #抬筆
goto(30 + x * 150 ,z*15)
pendown() #落筆
color("black","green") #輪廓顏色為黑色,填充顏色為綠色
begin_fill()
for t in range(3):
left(120) #左轉120度
forward(60) #前進60像素
end_fill()
penup()
goto(7+ x * 150,0)
pendown()
color("black","brown") #輪廓顏色為黑色,填充顏色為棕色
begin_fill()
for t in range(2):
right(90)
forward(28)
right(90)
forward(14)
end_fill()
延伸擴展作業
(1)三排樹(一排3顆)
(2)三排樹(一排3顆),每顆樹編個號吧!
(3)做一個隨機種植樹林的森林吧
我們下次課再見吧!
1、使用turtle庫繪製輪廓顏色為紅色(red),填充顏色為粉紅色(pink)的心形圖形,效果如下圖,閱讀程序框架,補充代碼【x】 處代碼
from turtle import *
speed(9)
color('red',【1】)
【2】
pendown()
left(135)
fd(100)
right(180)
circle(50,-180)
left(90)
circle(50,-180)
right(180)
fd(100)
end_fill()
hideturtle()
done()
2、使用turtle庫繪製紅色五角形,效果如下圖所示。閱讀程序框架,補充【X】處代碼
from turtle import *
【1】
goto( -100, 50)
pendown()
color("red")
begin_fill()
for i in range(5):
forward(200)
【2】
end_fill()
hideturtle()
3、使用turtle庫繪製正文形螺旋線,效果如下圖所示,閱讀程序框架,補充【X】片代碼。
import turtle
n = 10
for i in range(1,10,1):
for j in [90,180,-90,0]:
turtle.seth( 【1】 )
turtle.fd( 【2】 )
n += 5
4、使用turtle庫繪製簡單城市剪影圖形,效果如下圖所示,閱讀程序框架,補充【X】片代碼。
import turtle
turtle.penup()
turtle.fd(-350)
turtle.pendown()
def DrawLine(【1】):
for angle in [0,90,-90,-90,90]:
turtle.left(angle)
turtle.fd(size)
for i in [20,30,40,50,40,30,20]:
【2】
turtle.hideturtle()
turtle.done()
5、使用turtle庫繪製同心圓圖形,效果如下圖所示,閱讀程序框架,補充【X】片代碼。
【1】
def DrawCctCircle( n ):
t.penup()
t.goto(0 ,-n )
t.pendown()
【2】
for i in range( 20, 100, 20):
DrawCctCircle(i)
6、使用turtle庫繪製鋼琴鍵示意圖形,效果如下圖所示,閱讀程序框架,補充【X】片代碼
import turtle as t
#t.setup(500,300)
t.speed(9)
t.penup()
t.goto( -180, -50)
【1】 #將畫筆移到絕對位置(-180,-50)處
【2】 # 畫筆落下
def Drawrect():
t.fd(40)
t.left(90)
t.fd(120)
t.left(90)
t.fd(40)
t.left(90)
t.fd(120)
t.penup()
t.left(90)
t.fd(42)
t.pendown()
for i in range(7):
Drawrect()
t.penup()
t.goto( -150, 0)
t.pendown()
def DrawRectBlack():
t.color('black')
t.begin_fill()
t.fd(30)
t.left(90)
t.fd(70)
t.left(90)
t.fd(30)
t.left(90)
t.fd(70)
t.end_fill()
t.penup()
t.left(90)
t.fd(40)
t.pendown()
DrawRectBlack()
DrawRectBlack()
t.penup()
t.fd(48)
t.pendown()
DrawRectBlack()
DrawRectBlack()
DrawRectBlack()
t.hideturtle()
t.done()
7、使用turtle庫繪製疊加等邊三角形,效果如下圖所示,閱讀程序框架,補充【X】片代碼。
import turtle
【1】 #將畫筆寬度設置為2像素
turtle.color('red')
【2】 # 向小海龜當前前行方向前進160像素
turtle.seth(120)
turtle.fd(160)
turtle.seth(-120)
turtle.fd(160)
turtle.penup()
turtle.seth(0)
turtle.fd(80)
turtle.pendown()
turtle.seth(60)
turtle.fd(80)
turtle.seth(180)
turtle.fd(80)
turtle.seth(-60)
turtle.fd(80)
8、使用turtle庫繪製八角星形,效果如下圖所示,閱讀程序框架,補充【X】片代碼。
import turtle as t
#t.colormode(255)
t.color(【1】) #設置顏色取值為金色(255,215,0)
t.begin_fill()
for x in range(【2】):
t.forward(200)
t.left(225)
t.end_fill()
9、使用turtle庫繪製5種多邊形,效果如下圖所示,閱讀程序框架,補充【X】片代碼。
from turtle import *
for i in range(5):
【1】 #畫筆抬起
goto( -200+100*i , -50)
pendown()
【2】( 40, steps= 3+i ) #繪某個形狀
done()
hideturtle()
10、使用turtle庫繪製樹圖形,效果如下圖所示,閱讀程序框架,補充【X】片代碼。
import turtle as t
def tree( length, 【1】 ): #樹的層次
if level <= 0:
return
t.forward( 【2】 ) #前進方向畫length距離
t.left( 45 )
tree( 0.6 * length, level - 1)
t.right( 90 )
tree( 0.6 * length, level - 1)
t.left( 45 )
t.backward( length )
return
t.pensize( 3 )
t.color( 'green')
t.left (90)
tree( 100, 6 )
【注】需要答案,記得給小編留言呀