Python 繪圖—使用Turtle庫繪製動態鐘錶__Python

來源:互聯網
上載者:User

Python函數庫眾多,而且在不斷更新,所以學習這些函數庫最有效方法,就是閱讀Python官方文檔。同時藉助Google和百度。

本文介紹的turtle庫對應的官方文檔地址為:https://docs.python.org/3.5/library/turtle.html

繪製動態鐘錶的基本思路如下(物件導向的編程):

使用5個turtle對象

1個turtle:繪製外錶盤

3個turtle:類比錶針行為

1個turtle:輸出錶盤上文字

根據即時時間使用ontimer()函數更新錶盤畫面,顯示效果如下:

 

相關函數的使用在程式中進行了詳細的注釋,代碼如下:

from turtle import *from datetime import * def Skip(step):    penup()    forward(step)    pendown() def mkHand(name, length):    #註冊Turtle形狀,建立錶針Turtle    reset()  #清空當前視窗,並重設位置等資訊為預設值    Skip(-length*0.1)    begin_poly()    forward(length*1.1)    end_poly()    handForm = get_poly()    register_shape(name, handForm)  def Init():    global secHand, minHand, hurHand, printer    mode("logo")# 重設Turtle指向北    #建立三個錶針Turtle並初始化    mkHand("secHand", 135)    mkHand("minHand",  110)    mkHand("hurHand", 90)    secHand = Turtle()    secHand.shape("secHand")    minHand = Turtle()    minHand.shape("minHand")    hurHand = Turtle()    hurHand.shape("hurHand")    for hand in secHand, minHand, hurHand:        hand.shapesize(1, 1, 3)        hand.speed(0)    #建立輸出文字Turtle    printer = Turtle()    printer.hideturtle()    printer.penup()     def SetupClock(radius):    #建立表的外框    reset()    pensize(7)    for i in range(60):        Skip(radius)        if i % 5 == 0:            forward(20)            Skip(-radius-20)        else:            dot(5)            Skip(-radius)        right(6)         def Week(t):        week = ["星期一", "星期二", "星期三",            "星期四", "星期五", "星期六", "星期日"]    return week[t.weekday()] def Date(t):    y = t.year    m = t.month    d = t.day    return "%s %d %d" % (y, m, d) def Tick():    #繪製錶針的動態顯示    t = datetime.today()    second = t.second + t.microsecond*0.000001    minute = t.minute + second/60.0    hour = t.hour + minute/60.0    secHand.setheading(6*second) #設定朝向,每秒轉動6度    minHand.setheading(6*minute)    hurHand.setheading(30*hour)         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.back(50)    printer.write("i_chaoren", align="center",                  font=("Courier", 14, "bold"))    printer.home()    tracer(True)     ontimer(Tick, 1000)#1000ms後繼續調用tick def main():    tracer(False) #使多個繪製對象同時顯示    Init()    SetupClock(160)    tracer(True)    Tick()    mainloop() if __name__ == "__main__":           main()


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.