Python繪圖庫Turtle Turtle介紹 Turtle是Python內嵌的繪製線、圓以及其他形狀(包括文本)的圖形模塊。 一個Turtle實際上是一個對象,在導入Turtle模塊時,就創建了對象,然後,可以調用Turtle對象的各種方法完成不同的操作。 當創建一個Turtle對象時,它的位置 ...
Python繪圖庫Turtle
Turtle介紹
Turtle是Python內嵌的繪製線、圓以及其他形狀(包括文本)的圖形模塊。
一個Turtle實際上是一個對象,在導入Turtle模塊時,就創建了對象,然後,可以調用Turtle對象的各種方法完成不同的操作。
當創建一個Turtle對象時,它的位置被設定在(0,0)處——視窗的中心,而且它的方向被設置為向右。Turtle模塊用筆來繪製圖形,就像在現實的紙上畫圖寫字。當移動筆的時候就會按著移動方向畫線。
海龜圖坐標詳解
海龜圖畫圖定位採用坐標系,坐標系的(0,0)位置在圖紙的中間點。其他的跟我們在數學中學的坐標是一樣的,分成四個象限。
如下圖所示:
Turtle基礎
1. 畫布
設置畫布大小與背景顏色
方法1:
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
參數:分別為畫布的寬(單位像素), 高, 背景顏色。
方法2:
turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
參數:width, height: 輸入寬和高為整數時, 表示像素; 為小數時, 表示占據電腦屏幕的比例,(startx, starty): 這一坐標表示矩形視窗左上角頂點的位置, 如果為空,則視窗位於屏幕中心
2. 畫筆
畫筆設置:
- 畫筆寬度 turtle.pensize(int) 參數是一個整形
- 畫筆顏色turtle.pencolor("black") 參數可以是字元串如"green", "red",也可以是RGB 3元組
- 畫筆速度 turtle.speed(speed) 設置畫筆移動速度,畫筆繪製的速度範圍[0,10]整數,數字越大越快。
3. 繪圖命令
海龜繪圖命令可以劃分為3種:一種為畫筆運動命令,一種為畫筆控制命令,還有一種是全局控制命令。
畫筆運動命令:
命令 |
說明 |
turtle.forward(distance)/fd() |
向當前畫筆方向移動distance像素長度 |
turtle.backward(distance) |
向當前畫筆相反方向移動distance像素長度 |
turtle.right(degree) |
順時針移動degree° |
turtle.left(degree) |
逆時針移動degree° |
turtle.pendown() |
移動時繪製圖形,預設時也為繪製 |
turtle.goto(x,y) |
將畫筆移動到坐標為x,y的位置 |
turtle.penup() |
提起筆移動,不繪製圖形,用於另起一個地方繪製 |
turtle.circle() |
畫圓,半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓 |
setx( ) |
將當前x軸移動到指定位置 |
sety( ) |
將當前y軸移動到指定位置 |
setheading(angle)/seth(angle) |
設置當前朝向為angle角度 |
home() |
設置當前畫筆位置為原點,朝向東。 |
dot(r) |
繪製一個指定直徑和顏色的圓點 |
畫筆控制命令:
命令 |
說明 |
turtle.fillcolor(colorstring) |
繪製圖形的填充顏色 |
turtle.color(color1, color2) |
同時設置pencolor=color1, fillcolor=color2 |
turtle.filling() |
返回當前是否在填充狀態 |
turtle.begin_fill() |
準備開始填充圖形 |
turtle.end_fill() |
填充完成 |
turtle.hideturtle() |
隱藏畫筆的turtle形狀 |
turtle.showturtle() |
顯示畫筆的turtle形狀 |
turtle.begin_poly() |
記錄畫筆的位置 |
turtle.get_poly() |
獲取畫筆的位置 |
全局控制命令:
命令 |
說明 |
turtle.clear() |
清空turtle視窗,但是turtle的位置和狀態不會改變 |
turtle.reset() |
清空視窗,重置turtle狀態為起始狀態 |
turtle.undo() |
撤銷上一個turtle動作 |
turtle.isvisible() |
返回當前turtle是否可見 |
stamp() |
複製當前圖形 |
turtle.write(s ,font=("font-name",font_size,"font_type")]) |
寫文本,s為文本內容,font是字體的參數,分別為字體名稱,大小和類型;font為可選項,font參數也是可選項 |
turtle.mainloop() |
繪製完成後不關閉視窗 |
案例:五角星
五角星畫法:
五角星每一個內角為36°,假如以海龜所在位置為起點先畫一條橫線,那麼畫到第一個角的時候需要拐彎可以使用 turtle.right()順時針,turtle.left() 逆時針旋轉畫筆
如果使用順時針旋轉 則180°-36°=144°
如果使用逆時針旋轉 則 180°+36°=216°
五個角即迴圈五次即可
import turtle
turtle.pensize(3) # 畫筆大小 turtle.pencolor("yellow") # 畫筆顏色 turtle.fillcolor("red") # 填充顏色 turtle.begin_fill() # 開始填充 for _ in range(5): # 五角星迴圈五次 turtle.forward(200) # 五角星的邊長200像素 turtle.left(144) # 畫筆旋轉角度 turtle.end_fill() # 填充完成
turtle.mainloop() # 不關閉視窗
|
案例:愛心
說明:桃心畫法
def draw_heart(r, angle=45):
|
完整代碼查看附件
import turtle
turtle.setup(1200, 600) # 視窗大小
# 畫心
turtle.color("black", "red") turtle.pensize(2) turtle.speed(10) turtle.up() # 提起畫筆 turtle.goto(0, 50)
turtle.down()
def draw_heart(r, angle=45): """ :param r: 桃心圓的半徑 :param angle: 起始畫筆角度 :return: 返回桃心底部尖點坐標 """ turtle.begin_fill() # 開始填充 turtle.seth(0) turtle.seth(angle) # 設置畫筆方向 turtle.circle(-r, 180) # 逆時針畫半圓 turtle.fd(2 * r) # 向前移動 turtle.begin_poly() # 記錄畫筆的位置 x, y = turtle.get_poly()[0] # 獲取畫筆的位置 turtle.right(90) # 逆時針旋轉畫筆 turtle.fd(2 * r) # 向前移動 turtle.circle(-r, 180) turtle.end_fill() # 填充結束 return x, y
# 畫桃心 x_y = [] start_x = 0 for _ in range(4): turtle.goto(start_x, 50) turtle.down() # 放下筆 x_y.append(draw_heart(8)) start_x += 50 turtle.up() # 提起畫筆
# 畫葉子 def draw_flower(x, y): """ 畫桃心下的花 :param x: 桃心尖底的x軸 :param y: 桃心尖底的y軸 :return: """ turtle.up() turtle.goto(x, y) turtle.seth(0) # 恢復畫筆向右 turtle.seth(-90) turtle.down() turtle.fd(60) turtle.goto(x, y) turtle.right(60) turtle.fd(20) turtle.left(90) turtle.fd(10) turtle.left(120) turtle.fd(20) turtle.up() turtle.goto(x, y) turtle.seth(0) # 恢復畫筆向右 turtle.seth(-115) turtle.down() turtle.fd(25) turtle.up() turtle.goto(x, y) turtle.seth(0) # 恢復畫筆向右 turtle.seth(-10) turtle.down() turtle.fd(20) turtle.right(90) turtle.fd(8) turtle.right(120) turtle.fd(20) turtle.goto(x, y) turtle.seth(-60) turtle.fd(20) turtle.up()
for x, y in x_y: draw_flower(x, y)
# 畫小人物 turtle.up() turtle.goto(-200, -50) turtle.down() turtle.seth(0) # 恢復畫筆向右,好控制方向 turtle.seth(45) turtle.fd(40) turtle.begin_poly() # 記錄畫筆的位置,腳叉的位置 x, y = turtle.get_poly()[0] # 獲取畫筆的位置 turtle.right(90) turtle.fd(35) turtle.goto(x, y) turtle.left(135) turtle.fd(90) turtle.seth(0) turtle.circle(30) # 畫圓 turtle.goto(x, y + 60) # 手的位置 turtle.fd(40) turtle.circle(30, 70) # 畫圓,拿花手的弧度 turtle.seth(0) turtle.up() turtle.goto(x, y + 50) # 手的位置 turtle.down() turtle.fd(50) turtle.begin_poly() # 記錄手的位置等下畫花需要用 f_x, f_y = turtle.get_poly()[0]
# 眼睛 turtle.up() turtle.goto(x - 15, y + 120) # 眼睛的位置 turtle.down() turtle.pensize(4) turtle.seth(45) turtle.circle(-10, 70) # 畫圓弧,拿花手的弧度 turtle.dot(10) # 眼睛畫圓 turtle.up()
turtle.goto(x + 10, y + 120) # 眼睛的位置 turtle.down() turtle.pensize(4) turtle.seth(45) turtle.circle(-10, 70) # 畫圓弧,拿花手的弧度 turtle.dot(10) # 眼睛 畫圓 turtle.up()
# 嘴巴 turtle.goto(x, y + 105) # 眼睛的位置 turtle.down() turtle.circle(10, 70) # 畫圓弧,拿花手的弧度
# 畫里拿的花葉子部分 turtle.pensize(3) # 將畫筆大小 turtle.up() turtle.goto(f_x, f_y) # 手的位置 turtle.left(20) turtle.down() turtle.fd(60) turtle.pensize(2) # 將畫筆調小 turtle.begin_poly() # 記錄手的位置等下畫花需要用 x, y = turtle.get_poly()[0] turtle.backward(80) turtle.up() turtle.goto(x, y) turtle.down() turtle.right(90) turtle.fd(20) turtle.right(90) turtle.fd(8) turtle.right(120) turtle.fd(25) turtle.right(200) turtle.fd(25) turtle.up() turtle.goto(x, y) turtle.down() turtle.right(60) turtle.fd(25) turtle.goto(x, y) turtle.right(40) turtle.fd(25) turtle.left(90) turtle.fd(8) turtle.left(110) turtle.fd(25)
turtle.goto(f_x + 34, f_y + 75) draw_heart(8, angle=20) # 手裡拿的桃心
# 寫文字 turtle.up() turtle.goto(150, 200) turtle.pencolor("PINK") # 畫筆顏色 turtle.write("TO: 所有同學", font=("方正舒體", 30, 'normal')) turtle.goto(180,140) turtle.write("送給棒棒的你", font=("方正舒體", 30, 'normal'))
turtle.hideturtle() turtle.mainloop()
|
喜歡Python的同學掃碼加我喲!!!!!