Turtle(海龜)作圖
來自專欄 Python公開課
1. 前言
Turtle 是 Python 內置的一個比較有趣味的模塊,俗稱 海龜作圖,它是基於 tkinter 模塊打造,提供一些簡單的繪圖工具,海龜作圖最初源自 20 世紀 60 年代的 Logo 編程語言,之後一些很酷的 Python 程序員構建了 turtle 庫,讓其他程序員只需要 import turtle,就可以在 Python 中使用海龜作圖。
2. 基本功能介紹
在海龜作圖中,我們可以編寫指令讓一個虛擬的(想像中的)海龜在屏幕上來回移動。這個海龜帶著一隻鋼筆,我們可以讓海龜無論移動到哪都使用這隻鋼筆來繪製線條。通過編寫代碼,以各種很酷的模式移動海龜,我們可以繪製出令人驚奇的圖片。使用海龜作圖,我們不僅能夠只用幾行代碼就創建出令人印象深刻的視覺效果,而且還可以跟隨海龜看看每行代碼如何影響到它的移動。這能夠幫助我們理解代碼的邏輯。所以海龜作圖也常被用作新手學習 Python 的一種方式。
2.1. Turtle motion (運動控制)
以下是運動控制中常用的一些函數:
# 畫筆定位到坐標(x,y)turtle.goto(x,y)# 向正方向運動 distance 長的距離turtle.forward(distance)# 向負方向運動 distance 長的距離turtle.backward(distance)# 向右偏 angle 度turtle.right(angle)# 向左偏 angle 度turtle.left(angle)# 回到原點turtle.home()# 畫圓形 radius 為半徑,extent 為圓的角度turtle.circle(radius,extent=None,steps=None)# 以 speed 速度運動turtle.speed(speed)
下面看一個例子。
畫一個邊長為100的正方形,然後再以半徑為50畫出其1/2圓。
import turtle# 控制畫筆的速度turtle.speed(5)# 將畫筆定位到原點turtle.goto(0,0)# 從原點開始,畫出一個邊長為100的正方形for i in range(4): # 正向運動 100 的距離 turtle.forward(100) # 向右偏 90 度 turtle.right(90)# 將畫筆定位到原點turtle.home()# 畫出一個半徑為100,佔1/2的圓turtle.circle(50,180)turtle.done()
得到的結果如下:
turtle.done()的作用是,啟動事件循環,必須是烏龜圖形程序中的最後一個語句,如果沒有這個語句,代碼運行完成後 窗口直接結束。
2.2 Pen control (畫筆控制)
以下是對畫筆的控制函數,常用的如下:
# 落筆,在此狀態下會畫出運動的軌跡turtle.pendown()# 起筆,在此狀態下不會畫出運動的軌跡turtle.penup()# 畫筆粗細turtle.pensize(width_=None)# 畫筆顏色turtle.pencolor(*args)# 填充顏色turtle.fillcolor(*args)# 開始填充turtle.begin_fill()# 結束填充turtle.end_fill()# 寫文字turtle.write(arg,move=False,align=」left」,font=(「Arial」, 8, 「normal」))
下面看一個例子。
畫一個正方形並填充,最後寫一些文字。
import turtle# 控制畫筆顏色turtle.pencolor(#000000)# 落筆turtle.pendown()# 設置填充顏色turtle.fillcolor(#FFFFFF)# 開始填充turtle.begin_fill()# 從原點開始,畫出一個邊長為100的正方形for i in range(4): # 正向運動 100 的距離 turtle.forward(200) # 向右偏 90 度 turtle.right(90)# 結束填充turtle.end_fill()# 起筆turtle.penup()# 畫筆定位到指定坐標turtle.goto(100,-100)# 寫文字,並將文字居中對齊turtle.write(Python公開課,align=center)turtle.home()turtle.done()
得到的結果如下:
2.2 Window control (視窗控制)
這裡有兩個常用的函數
# 設置畫布背景顏色turtle.bgcolor(*args)# 背景圖片填充turtle.bgpic(picname=None)
3、海龜作圖實例
我們用幾個簡單的例子講解海龜作圖的用法。
3.1 用正方形畫圓
以下代碼的作用是,畫360 個正方形每隔 1 度排列:
import turtleturtle.speed(10)for i in range(360): # 偏轉角度 turtle.setheading(i) for i in range(4): turtle.forward(100) turtle.left(90)turtle.done()
生成的圖案如下:
短短几行代碼可以生成一個漂亮規則的圖形。
3.2 美國隊長的盾牌
如需要代碼,請訪問Github地址:
https://github.com/cunxi1992/turtle_American_shield
生成的圖案如下:
3.3 更多案例
下面是網上挑選的使用 turtle 做的有意思的圖片,大家可以欣賞並試著做一下。
4、後記
更豐富詳細的功能及知識可以參考:
官方文檔:https://docs.python.org/3/library/turtle.html
關注微信公眾號:Python公開課,獲取《Python編程從入門到實踐》電子書。
推薦閱讀:
※Origin(Pro):3D圖-投影、垂線、標籤
※ggplot2繪圖之圖例微調
※Origin(Pro):3D圖--Error Bar