畫一個心送給心愛的小姐姐,Python繪圖庫Turtle

Python繪圖庫Turtle

Turtle介紹

Turtle是Python內嵌的繪製線、圓以及其餘形狀(包括文本)的圖形模塊。app

一個Turtle其實是一個對象,在導入Turtle模塊時,就建立了對象,而後,能夠調用Turtle對象的各類方法完成不一樣的操做。ide

當建立一個Turtle對象時,它的位置被設定在(0,0)處——窗口的中心,並且它的方向被設置爲向右。Turtle模塊用筆來繪製圖形,就像在現實的紙上畫圖寫字。當移動筆的時候就會按着移動方向畫線。oop

海龜圖座標詳解

海龜圖畫圖定位採用座標系,座標系的(0,0)位置在圖紙的中間點。其餘的跟咱們在數學中學的座標是同樣的,分紅四個象限。字體

以下圖所示:spa

 

 

 

 

 

 

 

Turtle基礎

1.    畫布

設置畫布大小與背景顏色3d

方法1:orm

turtle.screensize(canvwidth=None, canvheight=None, bg=None)對象

參數:分別爲畫布的寬(單位像素), 高, 背景顏色。blog

方法2:ci

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

 

相關文章
相關標籤/搜索