Python心形繪製的小改進:turtle模組
應我家領導要求編word文件處理指令碼時,恰逢即將迎來領導生日,就想著在指令碼上來點花頭,看到知乎網友編寫的turtle畫愛心指令碼(sorry翻了半天找不到連結了),實測發現畫出來有點不夠對稱,因此,對指令碼進行了修改(確保了愛心完全對稱)。博領導開心一笑足矣,指令碼拿走不寫~
按慣例本來首先要介紹下turtle模組,考慮到學不學模組無所謂,最重要的是領導開心,先對指令碼中影響你家領導的關鍵位置點出來。
- 設定影象視窗的標題,改成你家的風格吧,不要讓領導覺得是借來的程式
turtle.title('領導專用程式')
- 寫上要對領導說的表白(rou ma)話兒,一個命令是一行字,字太多就把字號改小點
lv.write("喵領導",font=(u"方正舒體",36,"normal"),align="center")
lv.write("生日快樂!",font=(u"方正舒體",48,"normal"),align="center")
lv.write("點我點我快點我",font=(u"華文琥珀",26,"bold"),align="right")
- 光畫個心就可以了嗎,領導有這麼好搞定嗎!禮物該送送,燭光晚餐該請請。比如禮物,可以把禮物的頁面連線到"點我點我快點我"上,開啟頁面的功能通過main()函式實現(webbrowser模組很簡單的),具體怎麼搞不知道就問度娘
def main():
pass
上原始碼:
#! usr/bin/eny python import turtle import datetime #生日快樂 def love(): def func(x, y): main() turtle.title('領導專用程式') lv=turtle.Turtle() lv.hideturtle() lv.getscreen().bgcolor('light blue') lv.color('yellow','red') lv.pensize(1) lv.speed(1) lv.up() lv.goto(0,-150) #開始畫愛心 lv.down() lv.begin_fill() lv.goto(0, -150) lv.goto(-175.12, -8.59) lv.left(140) pos = [] for i in range(19): lv.right(10) lv.forward(20) pos.append((-lv.pos()[0], lv.pos()[1])) for item in pos[::-1]: lv.goto(item) lv.goto(175.12, -8.59) lv.goto(0, -150) lv.left(50) lv.end_fill() #寫字 lv.up() lv.goto(0, 80) lv.down() lv.write("喵領導",font=(u"方正舒體",36,"normal"),align="center") lv.up() lv.goto(0, 0) lv.down() lv.write("生日快樂!",font=(u"方正舒體",48,"normal"),align="center") lv.up() lv.goto(100, -210) lv.down() lv.write("點我點我快點我",font=(u"華文琥珀",26,"bold"),align="right") lv.up() lv.goto(160, -190) lv.resizemode('user') lv.shapesize(4, 4, 10)#調整小烏龜大小,以便覆蓋“點我”文字 lv.color('red', 'red') lv.onclick(func) lv.showturtle() def main(): pass if __name__ == '__main__': if datetime.date.today() == datetime.date(YYYY, MM, DD): #YYYY年,MM月,DD日 love() else: main()
模組還是要介紹下,就放最後吧,真(mei)愛(you)學(dui)習(xiang)的學習控們,繼續往下看。
turtle是python的一個非常初級的繪圖模組(功能可能還不如windows自帶畫圖?),基本就是通過“小烏龜”(游標箭頭)在視窗中移動,繪製出曲線,同時配以填充顏色,生成視覺化效果。
- 繪圖視窗
lv = turtle.Turtle() #生成繪圖視窗lv
turtle.Title('領導專用程式') #設定繪圖視窗標題為《領導專用程式》
lv.getscreen().bgcolor('red') #設定繪圖視窗lv的背景色
- 游標位置(小烏龜)
lv.hideturtle() #小烏龜隱藏不顯示
lv.showturtle() #顯示小烏龜
lv.position() #返回小烏龜當前所在的座標
lv.heading() #返回小烏龜腦袋朝向
lv.left(90) #小烏龜腦袋左轉90度
lv.right(90) #小烏龜腦袋右轉90度
- 畫線(移動)
lv.color('yellow','red') #設定畫線的顏色(前者)、填充的顏色(後者)
lv.up() #小烏龜飛起來,這之後的小烏龜只移動不畫線
lv.down() #小烏龜地上爬,這之後的小烏龜邊移動邊畫線
lv.goto(0,-150) #小烏龜沿直線移動(或畫線)到絕對座標(0,-150)
lv.forward(100) #小烏龜向前(腦袋方向)爬100距離(或畫線)
lv.backward(100) #小烏龜倒車(背對腦袋)100距離(或畫線)
lv.circle(100, extent=None, steps=None) #小烏龜以其左側(腦袋方向逆時針轉90度)100距離處的點為圓心,畫圓(或移動)。如果畫弧線,則extent給定弧線的角度。如果畫多邊形,則steps給定整圓幾條邊
lv.write("喵領導",font=(u"方正舒體",36,"normal"),align="center") #寫字。font為字型設定(字型,字號,型別)。align為對齊方式
- 填充
lv.begin_fill() #開始填充,之後小烏龜移動時,不僅畫線,而且填充
lv.end_fill() #結束填充,直到這個時候前面小烏龜移動畫線的填充效果才會顯示出來
- 滑鼠操作(連結)
lv.onclick(func, btn=1) #滑鼠點選則呼叫函式func。func一定要定義為兩引數函式func(x,y),x、y分別為滑鼠點選位置的座標值。btn表示滑鼠點選型別(1就是左鍵)
lv.onrelease(func, btn=1) #滑鼠點選釋放則呼叫函式func
lv.ondrag(func, btn=1) #滑鼠摁住拖動則呼叫函式func
#滑鼠點選的是小烏龜,所以要將小烏龜調整到方便點選的大小
lv.resizemode('user') #小烏龜大小設定為允許使用者自定義
lv.shapesize(stretch_wid=4, stretch_len=4, outline=10)#調整小烏龜大小。stretch_wid、stretch_len表示小烏龜整體寬度、長度的縮放係數。outline為小烏龜輪廓線的寬度
- 動畫效果
lv.speed(1) #設定指令碼執行時,圖形繪製的速度。速度1~10表示逐漸增加的速度。速度0表示沒有烏龜爬行過程(繪製過程)動畫,直接顯示結果圖形