一、簡介
Turtle最早來自於LOGO語言,是專門用於小孩子學習編程的,通過編程模擬一只turtle(海龜)在畫板上爬行繪制圖案,后來很多高級語言都移植了海龜繪圖,python從2.6之后也將turtle庫加入了其內部庫中。由於是內部庫,使用import turtle語句就能引入turtle庫,繪圖主要有以下幾個步驟:設置畫布、設置畫筆、控制海龜移動繪制圖形、色彩填充等。
二、基礎知識
1)turtle庫的引用
引用turtle庫主要有以下三種方法:
1.使用import保留字直接引用
import turtle #每次使用函數需加上turtle.
2.使用from和import保留字共同完成
from turtle import * #調用函數時不用加turtle.,但可能會與變量名重復
3.使用import和as保留字共同完成
import turtle as t #給turtle庫起了個別名t
2)畫布
畫布即turtle提供的繪圖區域,可用以下指令設置畫布的規模:
1.
turtle.setup(width,height, startx, starty)
width為畫布的寬度;
heigh為畫布的高度;
(startx,starty)這一坐標表示矩形窗口左上角頂點的位置, 如果為空,則窗口位於屏幕中心。
如:
turtle.setup(650,300,100,100)
2.
turtle.screensize(canvwidth canvheight, bg)
canvwidth為畫布的寬度;
canvheight為畫布的高度;
bg為畫布背景顏色。
如:
turtle.screensize(500,400,"red")
3)畫筆
1、畫筆的狀態
在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一只面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。
2、畫筆的屬性
畫筆(畫筆的屬性,顏色、畫線的寬度等)
turtle.penside() #設置畫筆的寬度 turtle.pencolor() #沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字符串如"green", "red",也可以是RGB3元組。 turtle.speed(speed) #設置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數,數字越大越快。
4)操縱畫筆的函數
繪制圖形需要許多讓畫筆移動和轉向甚至顏色的函數,常用到的函數有如下:
畫筆操作后一直有效,一般成對使用
turtle.penup() #turtle.pu() 提起畫筆移動,不繪制圖形 turtle.pendown() #turtle.pd() 畫筆落下
畫筆設置后一直有效,直到下次重新設置
turtle.penside(width) #turtle.width(width) 設置畫筆的寬度 turtle.pencolor(color) #設置畫筆的顏色 #color參數有三種形式 #顏色字符串 如turtle.pencolor("pink") #RGB小數值 如turtle.pencolor(0.63,0.13,0.94) #RGB整數值 如turtle.pencolor(128,0,128) #RGB數值元組 如turtle.pencolor((0.63,0.13,0.94))
畫筆改變角度的函數,只轉不動
turtle.right(degree) #順時針移動degree° turtle.left(degree) #逆時針移動degree° turtle.seth(degree) #只改變畫筆方向但不移動,degree為絕對度數
畫筆運動的函數
turtle.forward(distance) #向當前畫筆方向移動distance像素長度 turtle.backward(distance) #向當前畫筆相反方向移動distance像素長度 turtle.goto(x,y) #將畫筆移動到坐標為x,y的位置 turtle.circle(r,extent) #根據半徑r繪制extent角度的弧形,r默認在畫筆左端距離r長度的地方,默認繪制完整的圓
三、繪制實例
1)Python蟒蛇繪制
代碼如下:
#Python蟒蛇繪制 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()
效果圖如下:
2)繪制一朵玫瑰花
代碼如下:
#繪制一朵玫瑰花 import turtle # 設置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() turtle.right(90) # 花蕊 turtle.fillcolor("lightpink") 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) #葉子2 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.right(90) turtle.fd(85) # 葉子3 turtle.right(90) turtle.fd(15) 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(90) #葉子4 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(75) turtle.left(90) turtle.circle(200, 60) turtle.pendown() turtle.done()
效果圖如下:
3)繪制太極圖
代碼如下:
#繪制太極圖 from turtle import * setup(800,800,100,100) #繪制左半部分 fillcolor('#FFFFFF') begin_fill() circle(100,180) circle(200,180) seth(180) circle(-100,180) end_fill() seth(90) penup() fd(85) pendown() seth(0) fillcolor('#000000') begin_fill() circle(25) end_fill() seth(-90) penup() fd(85) pendown() seth(180) #繪制右半部分 fillcolor('#000000') begin_fill() circle(100,180) circle(200,180) seth(0) circle(-100,180) end_fill() seth(-90) penup() fd(85) pendown() seth(-180) fillcolor('#FFFFFF') begin_fill() circle(25) end_fill() hideturtle() done()
效果圖如下: