turtle庫

Winter發表於2019-10-11

turtle庫是Python中一個很流行的繪圖函式庫,主要是依據座標軸來繪製影象,畫筆則是一隻小海龜,通過控制海龜的在座標平面的移動,從而繪製各種各樣的影象。

安裝turtle

pip install turtle

畫布

turtle中的畫布就是用於繪畫的區域,我們可以設定它的大小和初始位置。
常用的畫布方法:

  • screensize()方法
語法:turtle.screensize(canvwidth=None, canvheight=None, bg=None)
canvwidth -- 寬
canvheight -- 高
bg -- 背景顏色
示例:
import turtle, time
turtle.screensize(800, 600, "green")
turtle.screensize() #返回預設大小(400, 300)
time.sleep(3)
  • setup()方法
語法:turtle.setup(width=0.5, height=0.75, startx=None, starty=None)
width、height  --  輸入寬和高為整數時, 表示畫素。為小數時, 表示佔據電腦螢幕的比例 
startx、starty -- 這一座標表示 矩形視窗左上角頂點的位置,如果為空,則視窗位於螢幕中心
示例:
import turtle, time
turtle.screensize(800, 600, "green")
turtle.screensize() #返回預設大小(400, 300)
time.sleep(3)

畫筆

畫筆有顏色、畫線的寬度等屬性:

  • turtle.pensize():設定畫筆的寬度;
  • turtle.pencolor():沒有引數傳入返回當前畫筆顏色。傳入引數設定畫筆顏色,可以是字串如”red”、”blue”,也可以是RGB 3元組。
  • turtle.speed():設定畫筆移動速度,畫筆繪製的速度範圍[0,10]整數,數字越大越快。

繪圖命令

操縱海龜繪圖有多種命令,這些命令可以分為3中,分別是:畫筆運動命令、畫筆控制命令和全域性控制命令。

畫筆運動命令
命令 說明
turtle.forward(distance) 向當前畫筆方向移動distance畫素長
turtle.backward(distance) 向當前畫筆相反方向移動distance畫素長度
turtle.right(degree) 順時針移動degree°
turtle.left(degree) 逆時針移動degree°
turtle.pendown() 移動時繪製圖形,預設時也為繪製
turtle.goto(x,y) 將畫筆移動到座標為x,y的位置
turtle.penup() 移動時不繪製圖形,提起筆,用於另起一個地方繪製時用
turtle.speed(speed) 畫筆繪製的速度範圍[0,10]整數
turtle.circle() 畫圓,半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓
畫筆控制命令
命令 說明
turtle.pensize(width) 繪製圖形時的寬度
turtle.pencolor() 畫筆顏色
turtle.fillcolor(colorstring) 繪製圖形的填充顏色
turtle.color(color1, color2) 同時設定pencolor=color1, fillcolor=color2
turtle.filling() 返回當前是否在填充狀態
turtle.begin_fill() 準備開始填充圖形
turtle.end_fill() 填充完成
turtle.hideturtle() 隱藏箭頭顯示;
turtle.showturtle() 與hideturtle()函式對應
全域性控制命令
命令 說明
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的引數也是可選項

練手

繪製一個五角星

import turtle
import time
turtle.setup(1500, 1400, 0, 0)
turtle.pensize(5)
turtle.pencolor("pink")
turtle.fillcolor("red")
turtle.begin_fill()
for _ in range(5):
    turtle.forward(400)
    turtle.right(144)
turtle.end_fill()
time.sleep(5)

之前看到一個例項,可以繪製出一棵好看的櫻花樹,有興趣的可以看一下呀
連結: https://blog.csdn.net/z564359805/article/details/85861481#commentBox

具體程式碼如下:

#!/usr/bin/env python
# coding=utf-8
# 畫一棵櫻花
import turtle
import random
from turtle import *
from time import sleep
# 畫櫻花的軀幹(60,t)
def tree(branchLen, t):
    sleep(0.0005)
    if branchLen > 3:
        if 8 <= branchLen <= 12:
            if random.randint(0, 2) == 0:
                t.color('snow')  # 白
            else:
                t.color('lightcoral')  # 淡珊瑚色
            t.pensize(branchLen / 3)
        elif branchLen < 8:
            if random.randint(0, 1) == 0:
                t.color('snow')
            else:
                t.color('lightcoral')  # 淡珊瑚色
            t.pensize(branchLen / 2)
        else:
            t.color('sienna')  # 赭(zhě)色
            t.pensize(branchLen / 10)  # 6
        t.forward(branchLen)
        a = 1.5 * random.random()
        t.right(20 * a)
        b = 1.5 * random.random()
        tree(branchLen - 10 * b, t)
        t.left(40 * a)
        tree(branchLen - 10 * b, t)
        t.right(20 * a)
        t.up()
        t.backward(branchLen)
        t.down()
# 掉落的花瓣
def petal(m, t):
    for i in range(m):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        t.up()
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.down()
        t.color('lightcoral')  # 淡珊瑚色
        t.circle(1)
        t.up()
        t.backward(a)
        t.right(90)
        t.backward(b)
def main():
    # 繪圖區域
    t = turtle.Turtle()
    # 畫布大小
    w = turtle.Screen()
    t.hideturtle()  # 隱藏畫筆
    getscreen().tracer(5, 0)
    w.screensize(bg='wheat')  # wheat小麥
    t.left(90)
    t.up()
    t.backward(150)
    t.down()
    t.color('sienna')
    # 畫櫻花的軀幹
    tree(60, t)
    # 掉落的花瓣
    petal(200, t)
    w.exitonclick()
main()

參考: https://www.9xkd.com/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908432/viewspace-2659461/,如需轉載,請註明出處,否則將追究法律責任。

相關文章