1. 程式人生 > >Python心形繪製的小改進:turtle模組

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表示沒有烏龜爬行過程(繪製過程)動畫,直接顯示結果圖形