python 使用turtle庫畫圖

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()#啓動事件循環不然畫完就關閉了

效果圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章