Turtle庫是python中較流行的函數庫。
Turtle的基礎知識表:
畫布大小 | ||
canvas | 我們展開用於繪畫區域,可以設置大小、初始位置和背景顏色 | screensize(canvwidth=None, canvheight=None, bg=None) |
canvwidth | 畫布的寬度、單位像素 | |
canvheight | 畫布的高度、單位像素 | |
bg | 畫布的背景、默認爲(400,300,None) | |
畫布位置 | ||
setup | 設置畫布的位置 | setup(width=0.5, height=0.75, startx=None, starty=None) |
width | 輸入的寬,單位像素,爲小數時是屏佔比 | |
height | 輸入的高,單位像素,爲小數時是屏佔比 | |
startx,starty | 表示矩形窗口左上角頂點的位置。如果爲空,則窗口位於屏幕中心 | |
畫筆 | ||
畫筆狀態 | 座標原點爲朝x軸的小烏龜 | |
pensize() | 畫筆的寬度 | |
pencolor() | 畫筆顏色 | |
speed() | 畫筆的速度,區間[0-10],數字越大越快 | |
forward() | 向當前畫筆方向移動多少像素長度 | |
backward() | 向當前畫筆反方向移動多少像素長度 | |
right() | 畫筆順時針移動多少角度 | |
left() | 畫筆逆時針移動多少角度 | |
pendown() | 移動時繪製圖形,缺省時也爲繪製 | |
goto(x,y) | 將畫筆移動到座標(x,y)的位置 | |
penup() | 移動時暫時不繪製,用於另起一個地方繪製時用 | |
circle() | 畫圓,半徑未正負,表示圓心在畫筆的左邊(右邊)畫圓 | |
fillcolor(string) | 圖形填充顏色 | |
begin_fill() | 準備開始填充圖形 | |
end_fill() | 填充完成 | |
hideturtle() | 隱藏箭頭顯示 | |
showturtle() | 顯示箭頭 | |
clear() | 全局清空turtle窗口,但是turtle位置狀態不變 | |
reset() | 清空窗口,重置爲起始狀態 | |
undo() | 撤銷上一個動做 | |
isvisible() | 返回當前turtle是否可見 | |
stamp() | 複製當前圖形 | |
write(s,font) | 寫文本,s是文本內容,font爲字體參數(字體名稱,大小,類型) | ,font=("font-name",font_size,"font_type") |
其他命令 | ||
done()/mainloop() | 啓用事件循環,必須是turtle圖形程序中的最後一個語句 | |
delay | 設置或返回以毫秒爲單位的繪畫延遲 | |
begin_poly() | 開始記錄多邊形的頂點,當前的烏龜位置是多邊形的第一個頂點 | |
end_poly() | 結束記錄多邊形的頂點,當前的烏龜位置是多邊形的最後一個頂點,且將與第一個頂點相連 | |
get_poly() | 返回最後記錄的多邊形 | |
mode() |
設置turtle模式,並執行。如果沒給出模式,默認爲當前模式 |
|
模式 | 初始龜標題 | 正角度 |
standard | 向右(東) | 逆時針 |
logo | 向上(北) | 順時針 |
畫布就是我們繪畫的區域,我們可以設置他的大小和初始位置:
如:screensize(canvwidth=None, canvheight=None, bg=None)中設置寬高和背景
或者: turtle.setup(width=800,height=800, startx=100, starty=100)設置的是畫布大小和座標表示矩形窗口左上角頂點的位置,
畫筆就是設置畫筆的屬性,顏色,寬度
實例:
畫愛心:
#!/usr/bin/python
# -*-coding:utf-8 -*-
from turtle import *
def curvemove():
#這個函數是爲了繪製愛心上方的曲線
for i in range(200):
right(1)
fd(1)
pensize(2) #調整畫筆粗細
speed(100) #調節畫筆速度
color('red','pink') #畫筆顏色及填充顏色
begin_fill() #開始填充
left(140)
fd(111.65)
curvemove() #調用函數
left(120)
curvemove() #調用函數
fd(111.65)
end_fill() #結束填充
hideturtle() #隱藏畫筆
done()
結果:
畫正方形曲線
#!/usr/bin/python
# -*-coding:utf-8 -*-
from turtle import *
def draw_begin():
n = 5
for i in range(1,10):
for j in [90,180,-90,0]:
seth(j)
fd(n)
n += 5
if __name__=="__main__":
draw_begin()
hideturtle()
done()
效果:
畫五角星:
#!/usr/bin/python
# -*-coding:utf-8 -*-
from turtle import *
import time
def main():
pensize(5)
pencolor('yellow')
fillcolor('red')
begin_fill()
for i in range(5):
forward(200)
right(144)
end_fill()
time.sleep(2)
penup()
hideturtle()
goto(-150,-120)
color('violet')
write("Done", font=('Arial', 40, 'normal'))
mainloop()
if __name__=="__main__":
main()
效果圖:
畫太陽花:
#!/usr/bin/python
# -*-coding:utf-8 -*-
from turtle import *
import time
def main():
#screensize(800,600,none)#設置畫布大小和背景顏色
color('red','yellow')#設置畫筆顏色紅,填充爲黃
setup(width=800,height=600,startx=300,starty=350)#前面設置畫布大小。後面設置畫布矩形窗口左上角頂點的位置
speed(9)#速度
for i in range(49):
begin_fill()#開始填充
forward(200)#前進200像素
left(170)#逆時針轉170毒
end_fill()#結束填充
hideturtle()#隱藏畫筆
if __name__=="__main__":
main()
mainloop()#啓動事件循環不然畫完就關閉了
效果圖:
畫時鐘:
#!/usr/bin/python
# -*-coding:utf-8 -*-
from turtle import *
from datetime import *
#寫星期幾
def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]
#寫日期
def Date(t):
y = t.year
m = t.month
d = t.day
return "%s %d %d" % (y, m, d)
#擡起畫筆,向前運動一段距離放下
def Skip(step):
penup()
forward(step)
pendown()
#註冊turtle的形狀,建立錶針turtle
def mkHand(name,length):
reset()#設置畫布爲空
Skip(-length*0.1)#運動
begin_poly()#開始記錄多邊形的頂點
forward(length*1.1)#前進
end_poly()#結束記錄多邊形的頂點。且將一第一個頂點相連
handForm = get_poly()#返回記錄的多邊形
register_shape(name,handForm)
def Init():
global secHand,minHand,hurHand,printer #秒,分,時,打印
mode("logo")#模型,設置爲向上,向北,順時針方向模式
mkHand("secHand",135)
mkHand("minHand",120)
mkHand("hurHand",85)
secHand = Turtle()#畫秒的
secHand.shape("secHand")
minHand = Turtle()#畫分的
minHand.shape("minHand")
hurHand = Turtle()#畫小時的
hurHand.shape("hurHand")
for hand in secHand,minHand,hurHand:
hand.shapesize(1,1,3)
hand.speed(0)
#建立輸出文字的Tutle
printer = Turtle()
printer.hideturtle()
printer.penup()
def SetupClock(radius):
#建立表的外框
reset()
pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0 :
forward(20)
Skip(-radius-20)
Skip(radius+20)
if i == 0:
write(int(12), align="center", font=("Courier", 14, "bold"))
elif i == 30:
Skip(25)
write(int(i/5), align="center", font=("Courier", 14, "bold"))
Skip(-25)
elif (i == 25 or i == 35):
Skip(20)
write(int(i/5), align="center", font=("Courier", 14, "bold"))
Skip(-20)
else:
write(int(i/5), align="center", font=("Courier", 14, "bold"))
Skip(-radius - 20)
else:
dot(5)
Skip(-radius)
right(6)
#Tick()繪製日期的動態顯示
def Tick():
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)
tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",font=("Courier", 14, "bold")) #畫星期幾
printer.back(130)
printer.write(Date(t), align="center",font=("Courier", 14, "bold")) #畫日期
printer.home()
tracer(True)
# 100ms後繼續調用tick
ontimer(Tick, 100)
def main():
tracer(False)# 打開/關閉龜動畫,併爲更新圖紙設置延遲。
Init()#初始化
SetupClock(160)
tracer(True)
Tick()
if __name__=="__main__":
main()
mainloop()#啓動事件循環不然畫完就關閉了
效果圖: