Python中turtle繪圖模塊的詳細(xì)講解
前言
turtle庫是Python語言中一個(gè)很流行的繪制圖像的函數(shù)庫,可以輕松地繪制出精美的形狀和圖案,很適合用來引導(dǎo)孩子學(xué)習(xí)編程。
turtle模塊(module)是Python語言中的標(biāo)準(zhǔn)模塊(內(nèi)置模塊)之一。
【在Python中,模塊也稱作庫(Library)】
turtle基本概念
畫布(canvas),turtle模塊展開用于繪圖的區(qū)域,可以設(shè)置其大小和初始位置。
turtle 中默認(rèn)的模式為 standard ,其坐標(biāo)原點(diǎn)在畫布(canvas)中心,單位為象素(pixel)。turtle空間坐標(biāo)體系分為位置坐標(biāo)系和角度坐標(biāo)系,畫布默認(rèn)大小(400, 300),對(duì)于位置坐標(biāo)系而言,與數(shù)學(xué)中的直角坐標(biāo)系相同,正中心的坐標(biāo)就是(0,0),你可以想象一個(gè)小烏龜,在一個(gè)橫軸為x、縱軸為y的坐標(biāo)系原點(diǎn),(0,0)位置開始,它根據(jù)一組函數(shù)指令的控制,在這個(gè)平面坐標(biāo)系中移動(dòng),從而在它爬行的路徑上繪制了圖形。goto函數(shù)有兩個(gè)參數(shù)X,Y,指的是讓在任何位置的海龜去到達(dá)某一個(gè)坐標(biāo)的位置。對(duì)于角度坐標(biāo)系而言,以x軸正方向?yàn)?度,逆時(shí)針為角度正值,順時(shí)針為角度負(fù)值,也與數(shù)學(xué)中的相同。
調(diào)出模塊
import turtle
turtle定義窗體(窗口)的大小和位置的函數(shù)setup()
setup()函數(shù)改變窗體(窗口)的大小,確定畫布空間的大小及在屏幕中的位置,格式:
turtle.setup (width,height,startx,starty)
width, height: 輸入寬和高為整數(shù)時(shí), 表示像素; 為小數(shù)時(shí), 表示占據(jù)電腦屏幕的比例;(startx, starty): 這一坐標(biāo)表示 矩形窗口左上角頂點(diǎn)的位置, 如果為空,則窗口位于屏幕中心。
參見下圖:
單位為像素。
屏幕的的左上角為原點(diǎn)。
例、
import turtle turtle.setup(800,500,0,0)
參見如下示意圖:
又如:
turtle.setup(width=0.6, height=0.6) turtle.setup(width=800, height=800, startx=100, starty=100)
turtle定義定義了畫布的大小和背景色函數(shù)screensize()
screensize()函數(shù)改變畫布的大小和背景色,格式:
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
參數(shù)分別為畫布的寬(單位像素), 高, 背景顏色
如:
import turtle turtle.screensize(480, 360,"green")
窗體和畫布不是一個(gè)概念。如果畫布大于窗體,窗體會(huì)出現(xiàn)滾動(dòng)條,如果畫布小于窗體,畫布會(huì)填充整個(gè)窗體。想要改變窗體(窗口)的大小,不是用screensize函數(shù),要用setup函數(shù)。
窗體大于畫布,畫布填充了窗體。測試代碼:
import turtle turtle.setup(300,200) turtle.screensize(200,100,"blue") turtle.shape("turtle") #出現(xiàn)小烏龜
運(yùn)行之,參見下圖:
畫布大于窗體,窗體出現(xiàn)滾動(dòng)條。測試代碼:
import turtle turtle.setup(300,200) turtle.screensize(500,400,"blue") turtle.shape("turtle") #出現(xiàn)小烏龜
運(yùn)行之,參見下圖:
引用turtle模塊(庫)方法
方法1
import turtle turtle.circle(10) #使用turtle
方法2
from turtle import * circle(10) #使用turtle
方法3
import turtle as t t.circle(10) #使用turtle
turtle庫包含近百個(gè)功能函數(shù)。在此我們介紹一些常用的函數(shù):
繪制狀態(tài)函數(shù):pendown()、penup()、pensize()
別名 | 參數(shù)說明 | 功能/作用 | |
pendown() | pd() 或down() | 無 | 落下畫筆,之后移動(dòng)畫筆繪制。 |
penup() | pu()或up() | 無 | 抬起畫筆,之后移動(dòng)畫筆不繪制。 |
pensize(width) | width(width) | width:設(shè)置的畫筆線條寬度,如果為None或者為空,則返回當(dāng)前畫筆寬度 | 設(shè)置畫筆寬度,當(dāng)無參數(shù)輸入時(shí)返回當(dāng)前畫筆寬度。 |
顏色控制函數(shù):color()、pencolor()、begin_fill()、end_fill();
函數(shù)名 | 別名 | 參數(shù)說明 | 功能/作用 |
color(colorstring) 或 color((r,g,b)) 或 color(r,g,b) 或 color(colorstr1,colorstr2)或 color((r1,g1,b1),(r2,g2,b2)) |
| 當(dāng)畫筆和填充顏色相同時(shí)使用1個(gè)參數(shù); 當(dāng)畫筆和填充顏色不同時(shí)使用2個(gè)參數(shù)。
colorstring:表示顏色的字符串,例如:“Purple","red","blue"等。還支持十六進(jìn)制顏色值,如:"#6666CC"等 (r,g,b):顏色對(duì)應(yīng)RGB的值,如綠色用rgb(0, 128, 0)?!咀ⅰ?/p> | 返回設(shè)置畫筆或填充顏色,當(dāng)無參數(shù)輸入時(shí)返回當(dāng)前畫筆及填充顏色。 |
pencolor(colorstring) 或 pencolor((r,g,b)) 或 pencolor(r,g,b) |
| colorstring:表示顏色的字符串,例如:“Purple","red","blue"等。還支持十六進(jìn)制顏色值,如:"#6666CC"等
(r,g,b):顏色對(duì)應(yīng)的RGB的值,如綠色用rgb(0, 128, 0)?!咀ⅰ?/p> | 返回或設(shè)置畫筆顏色,當(dāng)無參數(shù)輸入時(shí)返回當(dāng)前畫筆顏色。 |
begin_fill() |
| 無 | 在繪制帶有填充色彩圖形之前調(diào)用,表示填充開始。 |
,end_fill() |
| 無 | 在繪制帶有填充色彩圖形之后調(diào)用,表示填充結(jié)束。 |
fillcolor(colorstring) 或 fillcolor((r,g,b)) 或 fillcolor(r,g,b) | colorstring:表示顏色的字符串,例如:“Purple","red","blue"等。還支持十六進(jìn)制顏色值,如:"#6666CC"等 (r,g,b):顏色對(duì)應(yīng)的RGB的值,如綠色用rgb(0, 128, 0)。【注】 | 填充色彩 | |
【注】
turtle模塊(庫)中用字符串表示顏色,如
"red"表示紅色
"black"表示黑色
"blue"表示藍(lán)色
"orange"表示橘黃色
"green"表示綠色
"gold"表示金色
"yellow"表示紅色
"pink"表示粉色
還支持十六進(jìn)制顏色值,如:"#6666CC"、"#FF0000"、"#CCFFFF"等。
turtle模塊(庫)中用RGB三原色表示顏色
關(guān)于RGB三原色表示顏色簡介
當(dāng)R值取滿為255,G與B都取0時(shí)表示紅色,當(dāng)G值取滿為255,R與B都取0時(shí)表示綠色,當(dāng)B值取滿為255,R與G都取0時(shí)表示藍(lán)色,其他情況所得顏色即為紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的疊加顏色。常見疊加顏色如下表
顏色名稱 | 紅色值 Red | 綠色值 Green | 藍(lán)色值 Blue |
黑色 | 0 | 0 | 0 |
藍(lán)色 | 0 | 0 | 255 |
綠色 | 0 | 255 | 0 |
青色 | 0 | 255 | 255 |
紅色 | 255 | 0 | 0 |
洋紅色(亮紫色) | 255 | 0 | 255 |
黃色 | 255 | 255 | 0 |
白色 | 255 | 255 | 255 |
用R、G、B對(duì)應(yīng)的三元組來表示顏色。例如:(255,0,0)表示紅色,(0,255,0)表示綠色。
運(yùn)動(dòng)控制函數(shù):forward()、backward()、right()、left()、setheading()、goto()、circle()
函數(shù)名 | 別名 | 參數(shù)說明 | 功能/作用 |
forward(distance) | fd(distance) | distance:行進(jìn)距離的像素值。當(dāng)值為負(fù)數(shù)時(shí),表示向相反方向前進(jìn)。 | 向畫筆當(dāng)前行進(jìn)方向前進(jìn)distance距離。 |
backward(distance) 或 back(distance) | bk(distance) | distance:行進(jìn)距離的像素值。當(dāng)值為負(fù)值時(shí),表示向前進(jìn)方向行進(jìn)。backward()函數(shù)不改變畫筆的運(yùn)動(dòng)方向,相當(dāng)于后退著行進(jìn)。 | 向當(dāng)前畫筆前進(jìn)方向的反方向行進(jìn)distance距離。 |
right(angle) | rt(angle) | angle:角度整數(shù)值。 | 以當(dāng)前行進(jìn)角度為原點(diǎn),行進(jìn)方向向右改變相對(duì)角度值angle |
left(angle) | lt(angle) | angle:角度的整數(shù)值。 | 以當(dāng)前行進(jìn)角度為原點(diǎn),行進(jìn)方向向左改變相對(duì)角度值angle。 |
setheading(to_angle) | seth(to_angle) | to_angle:角度的整數(shù)值。 | 作用:設(shè)置畫筆當(dāng)前行進(jìn)方向的角度為to_angle,該角度為絕對(duì)方向角度值。 |
goto(x,y) |
| x,y:x為標(biāo)系的絕對(duì)橫坐標(biāo)值,y為置為坐標(biāo)系的絕對(duì)縱坐標(biāo)值。 | 將畫筆移動(dòng)到絕對(duì)位置(x,y)處。 |
circle(radius[,extent=None]) [還有一個(gè)參數(shù),在此未講] |
| radius:弧形半徑,當(dāng)值為正數(shù)時(shí),半徑在畫筆左側(cè)。當(dāng)值為負(fù)數(shù)時(shí),半徑在畫筆右側(cè)。 extent:繪制弧形角度。當(dāng)不給該參數(shù)或該參數(shù)為None時(shí),繪制整個(gè)圓形。當(dāng)extent的值為正數(shù)時(shí),順當(dāng)前方向繪制弧形;當(dāng)extent的值為負(fù)數(shù)時(shí),逆當(dāng)前方向繪制弧形。 | 根據(jù)半徑radius繪制extent角度的弧形。
|
【angle即角度,也可以為負(fù)數(shù)。distance即距離,也可以為負(fù)數(shù)】
除此之外,再簡要介紹一些函數(shù)如下
畫筆控制函數(shù)
函數(shù)名 | 說明 |
turtle.shape(name) | name指定烏龜狀:“arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”。默認(rèn)"classic" 如turtle.shape('turtle') |
turtle.hideturtle() | 隱藏畫筆的turtle形狀 |
turtle.showturtle() | 顯示畫筆的turtle形狀 |
全局控制函數(shù)
函數(shù)名 | 說明 |
turtle.clear() | 清空turtle窗口,但是turtle的位置和狀態(tài)不會(huì)改變 |
turtle.reset() | 清空窗口,重置turtle狀態(tài)為起始狀態(tài) |
turtle.undo() | 撤銷上一個(gè)turtle動(dòng)作 |
turtle.isvisible() | 返回當(dāng)前turtle是否可見 |
stamp() | 復(fù)制當(dāng)前圖形 |
turtle.write(s [,font=("font-name",font_size,"font_type")]) | 寫文本,s為文本內(nèi)容,font是字體的參數(shù),分別為字體名稱,大小和類型;font為可選項(xiàng),font參數(shù)也是可選項(xiàng)。字體名稱:"Arial"、"宋體"、"楷體"等 |
例、寫字函數(shù)write()的使用
import turtle turtle.penup() #抬起畫筆 turtle.goto(-200,100) #移動(dòng)位置 turtle.write("好好學(xué)習(xí),天天向上",font=("楷體",36))
其它函數(shù)
函數(shù)名 | 說明 | |||||||||
turtle.mainloop() 或 turtle.done() | 啟動(dòng)事件循環(huán) -調(diào)用Tkinter的mainloop函數(shù)。 必須是烏龜圖形程序中的最后一個(gè)語句。 | |||||||||
turtle.mode(mode=None) | 設(shè)置烏龜模式(“standard”,“logo”或“world”)并執(zhí)行重置。如果沒有給出模式,則返回當(dāng)前模式。
| |||||||||
turtle.delay(delay=None) | 設(shè)置或返回以毫秒為單位的繪圖延遲。 | |||||||||
turtle.begin_poly() | 開始記錄多邊形的頂點(diǎn)。當(dāng)前的烏龜位置是多邊形的第一個(gè)頂點(diǎn)。 | |||||||||
turtle.end_poly() | 停止記錄多邊形的頂點(diǎn)。當(dāng)前的烏龜位置是多邊形的最后一個(gè)頂點(diǎn)。將與第一個(gè)頂點(diǎn)相連。 | |||||||||
turtle.get_poly() | 返回最后記錄的多邊形。 |
使用Python的turtle(海龜)模塊畫圖步驟
第一步:讓Python引入turtle模塊,引入模塊就是告訴Python你想要用它。
import turtle
第二步:創(chuàng)建畫布,若使用默認(rèn)可跳過此步。
第三步:理順?biāo)悸?,選取函數(shù)繪圖實(shí)現(xiàn)意圖,這是最重要的一步,可能需要多次試驗(yàn)。
下面給出幾個(gè)例子
例1、繪制梯形
此梯形繪制在第四象限,所以梯形形每個(gè)頂點(diǎn)的坐標(biāo)中,x坐標(biāo)為正,y坐標(biāo)為負(fù)。四個(gè)點(diǎn)的坐標(biāo)分別選擇為D(100,-100)、E(200,-100)、F(250,-200)、G(50,-200)??梢娝L制的直角三角形DE=100,GF=200。由于D點(diǎn)的y坐標(biāo)與E點(diǎn)的y坐標(biāo)相等,所以,DE平行于x軸,由于G點(diǎn)的y坐標(biāo)與F點(diǎn)的y坐標(biāo)相等,所以,GF也平行于x軸。代碼為:
import turtle turtle.up() turtle.fillcolor('yellow') turtle.begin_fill() turtle.goto(100,-100) turtle.down() turtle.goto(200,-100) turtle.goto(250,-200) turtle.goto(50,-200) turtle.goto(100,-100) turtle.end_fill()
思考一下,如何將梯形繪制在正中間?
例2、使用circle()函數(shù)的例子
import turtle turtle.pencolor("red") turtle.circle(50) #整圓 turtle.pencolor("blue") turtle.circle(120, 180) #半圓 turtle.pencolor("green") turtle.circle(80,steps=3) #三角形
例3、畫五角星
import turtle turtle.pensize(5) turtle.pencolor("yellow") turtle.fillcolor("red") turtle.begin_fill() for i in range(5): turtle.forward(200) turtle.right(144) turtle.end_fill() turtle.hideturtle()
總結(jié)
到此這篇關(guān)于Python中turtle繪圖模塊的文章就介紹到這了,更多相關(guān)Python中turtle繪圖模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 在OpenCV里實(shí)現(xiàn)仿射變換—坐標(biāo)變換效果
這篇文章主要介紹了Python 在OpenCV里實(shí)現(xiàn)仿射變換—坐標(biāo)變換效果,本文通過一個(gè)例子給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08深入解析PYTHON?虛擬機(jī)令人拍案叫絕的字節(jié)碼設(shè)計(jì)
這篇文章主要為大家介紹了PYTHON虛擬機(jī)中令人拍案叫絕的字節(jié)碼設(shè)計(jì)深入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04對(duì)python過濾器和lambda函數(shù)的用法詳解
今天小編就為大家分享一篇對(duì)python過濾器和lambda函數(shù)的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01tensorflow實(shí)現(xiàn)softma識(shí)別MNIST
這篇文章主要為大家詳細(xì)介紹了tensorflow實(shí)現(xiàn)softma識(shí)別MNIST,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03python matplotlib畫圖實(shí)例代碼分享
這篇文章主要介紹了python matplotlib畫圖實(shí)例代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下2017-12-12幫你快速上手Jenkins并實(shí)現(xiàn)自動(dòng)化部署
在未學(xué)習(xí)Jenkins之前,只是對(duì)Jenkins有一個(gè)比較模糊的理解,即Jenkins是一個(gè)自動(dòng)化構(gòu)建項(xiàng)目發(fā)布的工具,可以實(shí)現(xiàn)代碼->github或者gitlab庫->jenkins自動(dòng)部署->訪問的整體的過程,而無需人為重新打包,今天就帶大家詳細(xì)了解一下,幫你快速上手Jenkins,需要的朋友可以參考下2021-06-06