畫一個心送給心愛的小姐姐,Python繪圖庫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.    畫筆

畫筆設置:

  1. 畫筆寬度 turtle.pensize(int)  參數是一個整形
  2. 畫筆顏色turtle.pencolor("black") 參數可以是字符串如"green", "red",也可以是RGB 3元組
  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):
    """
   
: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

 

 

 

完整代碼查看附件

 

 

 

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的同學掃碼加我喲!!!!!

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM