Python繪圖Turtle庫詳解

?轉載:https://blog.csdn.net/zengxiantao1994/article/details/76588580

Turtle庫是Python語言中一個很流行的繪制圖像的函數庫,想象一個小烏龜,在一個橫軸為x、縱軸為y的坐標系原點,(0,0)位置開始,它根據一組函數指令的控制,在這個平面坐標系中移動,從而在它爬行的路徑上繪制了圖形。
turtle繪圖的基礎知識:
1. 畫布(canvas)
? ? ? ? 畫布就是turtle為我們展開用于繪圖區域,我們可以設置它的大小和初始位置。
? ? ? ? 設置畫布大小
? ? ? ? ?turtle.screensize(canvwidth=None, canvheight=None, bg=None),參數分別為畫布的寬(單位像素), 高, 背景顏色。
? ? ? ? 如:turtle.screensize(800,600, "green")
? ? ? ? ? ? ? ?turtle.screensize() #返回默認大小(400, 300)
? ? ? ??
turtle.setup(width=0.5, height=0.75, startx=None, starty=None),參數:width, height: 輸入寬和高為整數時, 表示像素; 為小數時, 表示占據電腦屏幕的比例,(startx, starty): 這一坐標表示矩形窗口左上角頂點的位置, 如果為空,則窗口位于屏幕中心。
? ? ? ? 如:turtle.setup(width=0.6,height=0.6)
? ? ? ? ? ? ? ?turtle.setup(width=800,height=800, startx=100, starty=100)

2. 畫筆
2.1 畫筆的狀態
? ? ? ? 在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一只面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。
2.2 畫筆的屬性
? ? ? ? 畫筆(畫筆的屬性,顏色、畫線的寬度等)
? ? ? ? 1) turtle.pensize():設置畫筆的寬度;
? ? ? ? 2) turtle.pencolor():沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字符串如"green", "red",也可以是RGB 3元組。
? ? ? ? 3) turtle.speed(speed):設置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數,數字越大越快。
2.3 繪圖命令
? ? ? ? ?操縱海龜繪圖有著許多的命令,這些命令可以劃分為3種:一種為運動命令,一種為畫筆控制命令,還有一種是全局控制命令。
(1) ? ?畫筆運動命令


命令


說明


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.circle()


畫圓,半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓


setx( )


將當前x軸移動到指定位置


sety( )


將當前y軸移動到指定位置


setheading(angle)


設置當前朝向為angle角度


home()


設置當前畫筆位置為原點,朝向東。


dot(r)


繪制一個指定直徑和顏色的圓點


?
(2) ? ? 畫筆控制命令


命令


說明


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形狀


?
(3) ? ?全局控制命令


命令


說明


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參數也是可選項


?
(4) ? ?其他命令


命令


說明


turtle.mainloop()或turtle.done()


啟動事件循環 -調用Tkinter的mainloop函數。
必須是烏龜圖形程序中的最后一個語句。


turtle.mode(mode=None)


設置烏龜模式(“standard”,“logo”或“world”)并執行重置。如果沒有給出模式,則返回當前模式。


模式


初始龜標題


正角度


standard


向右(東)


逆時針


logo


向上(北)


順時針

?


turtle.delay(delay=None)


設置或返回以毫秒為單位的繪圖延遲。


turtle.begin_poly()


開始記錄多邊形的頂點。當前的烏龜位置是多邊形的第一個頂點。


turtle.end_poly()


停止記錄多邊形的頂點。當前的烏龜位置是多邊形的最后一個頂點。將與第一個頂點相連。


turtle.get_poly()


返回最后記錄的多邊形。


?
3. 命令詳解
? ? ? ? 3.1 turtle.circle(radius, extent=None, steps=None)
? ? ? ? 描述:以給定半徑畫圓
? ? ? ? 參數:
? ? ? ? radius(半徑):半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓;
? ? ? ? extent(弧度) (optional);
? ? ? ? steps (optional) (做半徑為radius的圓的內切正多邊形,多邊形邊數為steps)。
舉例:
circle(50) # 整圓;
circle(50,steps=3) # 三角形;
circle(120, 180) # 半圓
?
實例:
1、太陽花
?


# coding=utf-8import turtleimport time# 同時設置pencolor=color1, fillcolor=color2turtle.color("red", "yellow")turtle.begin_fill()for _ in range(50):turtle.forward(200)turtle.left(170)turtle.end_fill()turtle.mainloop()

?

2、五角星


# coding=utf-8import turtleimport timeturtle.pensize(5)turtle.pencolor("yellow")turtle.fillcolor("red")turtle.begin_fill()for _ in range(5):turtle.forward(200)turtle.right(144)turtle.end_fill()time.sleep(2)turtle.penup()turtle.goto(-150,-120)turtle.color("violet")turtle.write("Done", font=('Arial', 40, 'normal'))turtle.mainloop()

3、時鐘程序


# coding=utf-8import turtlefrom datetime import *# 抬起畫筆,向前運動一段距離放下def Skip(step):turtle.penup()turtle.forward(step)turtle.pendown()def mkHand(name, length):# 注冊Turtle形狀,建立表針Turtleturtle.reset()Skip(-length * 0.1)# 開始記錄多邊形的頂點。當前的烏龜位置是多邊形的第一個頂點。turtle.begin_poly()turtle.forward(length * 1.1)# 停止記錄多邊形的頂點。當前的烏龜位置是多邊形的最后一個頂點。將與第一個頂點相連。turtle.end_poly()# 返回最后記錄的多邊形。handForm = turtle.get_poly()turtle.register_shape(name, handForm)def Init():global secHand, minHand, hurHand, printer# 重置Turtle指向北turtle.mode("logo")# 建立三個表針Turtle并初始化mkHand("secHand", 135)mkHand("minHand", 125)mkHand("hurHand", 90)secHand = turtle.Turtle()secHand.shape("secHand")minHand = turtle.Turtle()minHand.shape("minHand")hurHand = turtle.Turtle()hurHand.shape("hurHand")for hand in secHand, minHand, hurHand:hand.shapesize(1, 1, 3)hand.speed(0)# 建立輸出文字Turtleprinter = turtle.Turtle()# 隱藏畫筆的turtle形狀printer.hideturtle()printer.penup()def SetupClock(radius):# 建立表的外框turtle.reset()turtle.pensize(7)for i in range(60):Skip(radius)if i % 5 == 0:turtle.forward(20)Skip(-radius - 20)Skip(radius + 20)if i == 0:turtle.write(int(12), align="center", font=("Courier", 14, "bold"))elif i == 30:Skip(25)turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-25)elif (i == 25 or i == 35):Skip(20)turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-20)else:turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))Skip(-radius - 20)else:turtle.dot(5)Skip(-radius)turtle.right(6)def Week(t):   week = ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]return week[t.weekday()]def Date(t):y = t.yearm = t.monthd = t.dayreturn "%s %d%d" % (y, m, d)def Tick():# 繪制表針的動態顯示t = datetime.today()second = t.second + t.microsecond * 0.000001minute = t.minute + second / 60.0hour = t.hour + minute / 60.0secHand.setheading(6 * second)minHand.setheading(6 * minute)hurHand.setheading(30 * hour)turtle.tracer(False) printer.forward(65)printer.write(Week(t), align="center",font=("Courier", 14, "bold"))printer.back(130)printer.write(Date(t), align="center",font=("Courier", 14, "bold"))printer.home()turtle.tracer(True)# 100ms后繼續調用tickturtle.ontimer(Tick, 100)def main():# 打開/關閉龜動畫,并為更新圖紙設置延遲。turtle.tracer(False)Init()SetupClock(160)turtle.tracer(True)Tick()turtle.mainloop()if __name__ == "__main__":main()

轉載于:https://www.cnblogs.com/chmusk/p/11078918.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277796.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277796.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(待完成)qbxt2019.05 總結2 - 數位DP

數位 DP 嚴格來說其實并不是 DP……它只是個單純的計數問題 但是怎么說呢……現在大家似乎都把數位 DP 叫這個名字,所以……我們還是……叫它 DP 額什么是數位 DP 呢? 一句話概括——一類求在 K 進制下m滿足條件的數的數量有多少個的算法 常見的問題形式…

mac使用brew update無反應解決辦法

為什么80%的碼農都做不了架構師?>>> mac系統中使用brew作為包管理工具,類似centos中的yum,ubuntu中的apt-get,在使用brew update的使用,有時候會長時間無反應,或者中途斷開連接,這是…

2018-2019-2 20175223 實驗三《敏捷開發與XP實踐》實驗報告

目錄 北京電子科技學院(BESTI)實驗報告實驗名稱:實驗三 敏捷開發與XP實踐實驗內容、步驟與體會:一、實驗三 敏捷開發與XP實踐-1二、實驗三 敏捷開發與XP實踐-2三、實驗三 敏捷開發與XP實踐-3四、實驗三 敏捷開發與XP實踐-4五、代碼…

(八)路徑(面包屑導航)分頁標簽和徽章組件

一&#xff0e;路徑組件 路徑組件也叫做面包屑導航。 <ol class"breadcrumb"><li><a href"#">首頁</a></li><li><a href"#">產品列表</a></li><li><a href"#">大…

第十周總結

失望光年轉載于:https://www.cnblogs.com/daisy99lijing/p/11064924.html

LC #45 JS

效率低下 最起碼容易看得懂&#xff1f;將就看吧 /*** param {number[]} nums* return {number}*/ var jump function(nums) {let len nums.length;if(len < 1){return 0;}function calPossibleLastStep(index){let res [];if(index > len){return res;}if(index <…

python之爬蟲(四)之 Requests庫的基本使用

什么是Requests Requests是用python語言基于urllib編寫的&#xff0c;采用的是Apache2 Licensed開源協議的HTTP庫如果你看過上篇文章關于urllib庫的使用&#xff0c;你會發現&#xff0c;其實urllib還是非常不方便的&#xff0c;而Requests它會比urllib更加方便&#xff0c;可以…

https://blog.csdn.net/cscscscsc/article/details/50

https://blog.csdn.net/cscscscsc/article/details/50899522轉載于:https://blog.51cto.com/7237876/2129682

linux下安裝mysql說明

1.msyql下載 mysql-5.6.33 通用版&#xff0c;linux64位&#xff0c;官方下載地址&#xff1a;http://dev.mysql.com/downloads/mysql/5.6.html#downloads。也可以通過命令下載&#xff1a;wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86…

win8下cocos2dx-3.2+VS2012環境配置及項目創建

這是本人CSDN的第一篇博客&#xff0c;因為假期在學校做實訓項目接觸到了cocos2dx&#xff0c;覺得是一個特別適用強大&#xff0c;有不錯的可移植性&#xff08;雖然可移植性不錯&#xff0c;但實際上寫好的游戲往Android上移植&#xff0c;我的隊友廢了好大勁。。。&#xff…

Android通過透明度設置背景變暗

變暗 WindowManager.LayoutParams lpgetWindow().getAttributes(); lp.alpha0.3f; getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); getWindow().setAttributes(lp);變為原來的樣子 WindowManager.LayoutParams lpgetWindow().getAttributes(); lp.alpha1.…

BZOJ4557:[JLOI2016/SHOI2016]偵察守衛——題解

https://www.lydsy.com/JudgeOnline/problem.php?id4557 小R和B神正在玩一款游戲。這款游戲的地圖由N個點和N-1條無向邊組成&#xff0c;每條無向邊連接兩個點&#xff0c;且地圖是連通的。換句話說&#xff0c;游戲的地圖是一棵有N個節點的樹。 游戲中有一種道具叫做偵查守衛…

Mac系統下Homebrew的安裝和使用Homebrew安裝python

這里向大家推薦一個東西&#xff0c;Mac下很好用的東西&#xff0c;叫做Homebrew。剛開始接觸Mac的時候&#xff0c;我也沒聽過這個東西&#xff0c;但裝了以后真的覺得&#xff0c;TMD太碉堡了。引用一句話&#xff1a;Homebrew is the easiest and most flexible way to inst…

JS中的深拷貝

前言&#xff1a;我們經常會遇到想要將一個對象為己所用&#xff0c;但又不能污染原對象的需求&#xff0c;這就涉及到了js對象的深拷貝。 比如說在VUE的子組件中&#xff0c;父組件傳過來的數據中若是有對象&#xff0c;而子組件需要用父組件的數據進行初始化并且有另做他用的…

Mac下cocos2dx-3.2+Xcode環境配置和項目創建

這是有關環境配置的第二篇教程&#xff0c;第一篇講的是win8下的環境配置。這里我們使用C。所有如果你用其他語言如Lua和js進行cocos2d開發&#xff0c;那么可以再找一找其他的配置文檔。下面要說Mac os 下 cocos2dx-3.2Xcode的環境配置&#xff0c;這里我使用的是Xcode 5.1.1。…

對flex-grow和flex-shrink的深入理解

flex彈性布局&#xff0c;如果子元素寬度之和大于或者小于父元素寬度&#xff0c;空間就會存在剩余和不夠&#xff0c;flex默認不換行&#xff0c;除非設置flex-wrap,那么這種情況下&#xff0c;有兩個重要的屬性&#xff0c;flex-grow和flex-shrink. flex-grow默認值為0&#…

拿下京東榜單第五首戰告捷,看聯想手機如何上演王者歸來

618對于手機行業來說是一個非常重要的日子&#xff0c;京東618上銷量的高低在某種程度上就代表了該手機品牌在國內市場的影響力&#xff0c;以及在行業中所處的位置。因此&#xff0c;今年的618各大手機品牌卯足了勁在京東平臺上展開較量。榮耀、小米、VIVO、OPPO等手機品牌相繼…

Mac OS使用技巧之一:查看Finder中的.bash_profile等系統隱藏文件

作為一個程序員&#xff0c;經常要配置變量&#xff0c;可能要更改hosts文件&#xff0c;或者你閑著沒事兒尋找homebrew給你安裝的東西在什么地方。Mac OS的內核是Unix&#xff0c;Linux/Unix系統出于系統安全和用戶安全的考慮&#xff0c;會把一些與系統相關的文件隱藏&#x…

java.lang.NumberFormatException: For input string: “name”

背景&#xff1a;action中查詢出list數據需要在前臺進行顯示&#xff0c;但根據主鍵在數據庫中查詢出的數據list中含有熟悉alist屬性為配置表&#xff0c;且支持用戶多選&#xff0c;前端通過el表達式顯示 前臺界面為&#xff1a;<c:forEach items"${list}" var&q…

win8下cocos2dx3.2移植android平臺及代碼打包APK

cocos2dx程序不能只在VS2012下運行&#xff0c;遲早是要搬運到Android和IOS上的。Windows下移植IOS平臺先擱下不說比較困難&#xff0c;而且只有越獄的蘋果機才可以運行&#xff0c;而且畢竟IOS高端、小眾。這里主要講一下移植Android&#xff0c;windows下cocos2dx打包成APK和…