一、基礎概念
1、畫布:畫布就是turtle為我們展開用於繪圖區域, 我們可以設置它的大小和初始位置。常用的畫布方法有兩個:screensize()和setup()。
(1)turtle.screensize(canvwidth, canvheight, bg):參數分別為畫布的寬(單位像素), 高, 背景顏色
如:
turtle.screensize(500,1000,'green')
2)turtle.setup(width, height, startx, starty):width, height:
輸入寬和高為整數時, 表示像素; 為小數時, 表示占據電腦屏幕的比例。(startx, starty): 這一坐標表示 矩形窗口左上角頂點的位置, 如果為空,則窗口位於屏幕中心。
2、畫筆:在畫布上,默認有一個坐標原點為畫布中心的坐標軸, 坐標原點上有一只面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:標原點
(位置),面朝x軸正方向
(方向),turtle繪圖中, 就是使用位置方向描述小烏龜(畫筆)的狀態。
(1)畫筆屬性:
1) turtle.pensize():設置畫筆的寬度;
2) turtle.pencolor():沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字符串如"green", "red",也可以是RGB 3元組。
3) turtle.speed(speed):設置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數,數字越大越快。
(2)繪制命令:
1)turtle.forward(distance)(別名:turtle.fd):向當前畫筆方向移動distance像素長度。
2)turtle.backward(distance):向當前畫筆相反方向移動distance像素長度。
3)turtle.right(degree):順時針移動degree°。
4)turtle.left(degree):逆時針移動degree°。
5)turtle.pendown()(別名:turtle.pd(),turtle.down()):移動時繪制圖形,缺省時也為繪制。
6)turtle.goto(x,y):將畫筆移動到坐標為x,y的位置。
7)turtle.penup()(別名:turtle.pu(),turtle.up()):提起筆移動,不繪制圖形,用於另起一個地方繪制。
8)turtle.circle():畫圓,半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓。
9)setx( ):將當前x軸移動到指定位置。
10)sety( ):將當前y軸移動到指定位置。
11)setheading(angle):設置當前朝向為angle角度。
12)home():設置當前畫筆位置為原點,朝向東。
13)dot(r):繪制一個指定直徑和顏色的圓點。
14)turtle.fillcolor(colorstring):繪制圖形的填充顏色。
15)turtle.color(color1, color2):同時設置pencolor=color1, fillcolor=color2。
16)turtle.filling():返回當前是否在填充狀態。
17)turtle.begin_fill():准備開始填充圖形。
18)turtle.end_fill():填充完成。
19)turtle.hideturtle():隱藏畫筆的turtle形狀。
20)turtle.showturtle():顯示畫筆的turtle形狀。
21)turtle.seth(to_angle)(別名:turtle.setheading(to_angle)):設置小海龜當前前進方向為to_angle,該角度是絕對方向的角度值。
3、實例:
(1)太陽花:
from turtle import * begin_fill() #准備開始填充圖形 pensize(2) #設置畫筆的寬度 color('red','yellow') #設置畫筆顏色為藍色,填充顏色為綠色 while True: forward(200) #畫筆移動200個像素長度 left(170) #逆時針移動170° if abs(pos())<1: #判斷畫筆是否回到起點 break end_fill() #結束填充圖形 done()
(2)玫瑰花:
from turtle import * #global pen and speed pencolor("black") fillcolor("red") speed(50) s=0.15 #init poistion penup() goto(0,600*s) pendown() begin_fill() circle(200*s,30) for i in range(60): lt(1) circle(50*s,1) circle(200*s,30) for i in range(4): lt(1) circle(100*s,1) circle(200*s,50) for i in range(50): lt(1) circle(50*s,1) circle(350*s,65) for i in range(40): lt(1) circle(70*s,1) circle(150*s,50) for i in range(20): rt(1) circle(50*s,1) circle(400*s,60) for i in range(18): lt(1) circle(50*s,1) fd(250*s) rt(150) circle(-500*s,12) lt(140) circle(550*s,110) lt(27) circle(650*s,100) lt(130) circle(-300*s,20) rt(123) circle(220*s,57) end_fill() lt(120) fd(280*s) lt(115) circle(300*s,33) lt(180) circle(-300*s,33) for i in range(70): rt(1) circle(225*s,1) circle(350*s,104) lt(90) circle(200*s,105) circle(-500*s,63) penup() goto(170*s,-330*s) pendown() lt(160) for i in range(20): lt(1) circle(2500*s,1) for i in range(220): rt(1) circle(250*s,1) fillcolor('green') penup() goto(670*s,-480*s) pendown() rt(140) begin_fill() circle(300*s,120) lt(60) circle(300*s,120) end_fill() penup() goto(180*s,-850*s) pendown() rt(85) circle(600*s,40) penup() goto(-150*s,-1300*s) pendown() begin_fill() rt(120) circle(300*s,115) lt(75) circle(300*s,100) end_fill() penup() goto(430*s,-1370*s) pendown() rt(30) circle(-600*s,35}
done()
(3)正多邊形漸變為圓
import turtle turtle.screensize(600,500,'white') turtle.pensize(3) #設置畫筆寬度為3 turtle.pencolor('blue') #設置畫筆顏色為黑色 turtle.fillcolor('yellow') #設置填充顏色為黃色 turtle.begin_fill() #開始填充 turtle.forward(-300) for i in range(3,8): turtle.circle(20, steps=i) turtle.forward(100) turtle.circle(20) turtle.end_fill() turtle.hideturtle() #隱藏海龜 turtle.done()
4)五角星:
from turtle import * pensize(2) color('yellow','red') begin_fill() while True: forward(220) right(144) if abs(pos()) < 1: break end_fill() hideturtle() done()