python實現動態時鐘(附代碼可直接運行)

Python是一門面向對象的解釋性語言(腳本語言),可以用來做很多有趣的事,最近想接觸一些新事物,所以學了一下python,發現這個語言真的是很奇妙,所以根據學習,自己利用python自帶的turtle和datetime庫實現了一個動態的時鐘,有興趣的朋友可以接著看一下,

剛學python,請多指教,不到八十行的代碼即可

首先需要引入turtle和datetime庫,這個就很簡單了,只要環境配好,這兩個庫應該是自帶的

接下來第一步就要畫表盤和刻度了,由於turtle默認是從始終3點鐘開始畫,所以我使用了turtle.mode('logo')將其調整成從12點方向開始移動,邏輯即為一個圓為360度,每一個刻度為6度,移動60次,是5的倍數時就將線畫的長一點,至於點的函數可自行查閱資料,以下是我實現錶盤及刻度值的代碼:

for i in range(60):
skip(150)
if i % 5 == 0:
turtle.pensize(6)
turtle.forward(20)
if i == 0:
turtle.write(12, align="center", font="weight")
elif i == 25 or i== 30 or i==35:
skip(20)
turtle.write(i / 5, align="center", font="weight")
skip(-20)
else:
turtle.write(i / 5, align="center", font="weight")
skip(-20)
else:
turtle.pensize(1)
turtle.dot()
skip(-150)
turtle.right(6)

第二步即要獲取當前日期和當前時間以期周幾,此時即需要用datetime的庫了,裡面自帶取日期,周幾的函數,只不過可能不是我們所需要的樣式,對於星期幾,我是通過固定一個數組,通過weekday()函數去作為下表獲取周幾,然後日期格式的話就需要用strftime()函數了

第三步當然是要畫時鐘、分鐘和秒鐘線啦,這個還是可以通過turtle去實現,三條線可以用公共函數實現

def create(name,length,color):
turtle.reset()
skip(-length*0.1)
turtle.begin_poly()
turtle.forward(length*1.1)
turtle.end_poly()
#register
turtle.register_shape(name,turtle.get_poly())
hand = turtle.Turtle()
hand.pencolor(color)
hand.shape(name)
hand.shapesize(1,1,3)
return hand

最後就是要讓時鐘自己動起來啦,首先要讓時鐘能正確的顯示當前時間,這裡我們還是通過角度度數的方法來實現了,用datetime庫去獲取當前秒,分,時,再與對應的度數相乘。然後動態改變時鐘我是用了run()函數並且一直遞歸調用自己(這個方法有點low,但是未想到其他處理方式)

然後動態時鐘就實現啦,以下是完整的代碼:(調整了好幾次格式都有問題,如果大家需要代碼的話可私信時鐘獲取)

# -*- coding:utf-8 -*-
import turtle
import datetime as date
def skip(distance):#小烏龜移動
turtle.penup()#畫筆

turtle.pencolor('#00cc66')
turtle.forward(distance)
turtle.pendown()
def draw():
turtle.reset()
for i in range(60):
skip(150)
if i % 5 == 0:
turtle.pensize(6)
turtle.forward(20)
if i == 0:
turtle.write(12, align="center", font="weight")
elif i == 25 or i== 30 or i==35:
skip(20)
turtle.write(i / 5, align="center", font="weight")
skip(-20)
else:
turtle.write(i / 5, align="center", font="weight")
skip(-20)
else:
turtle.pensize(1)
turtle.dot()
skip(-150)
turtle.right(6)
def getWeek(t):
week = ['星期一','星期二','星期三','星期四','星期五','星期六','星期天']
return week[t.weekday()]
def run():
d = date.datetime.today()
t.forward(75)
t.pencolor('grey')
t.write(getWeek(d), align="center", font="weight")
t.back(130)
t.write(d.strftime("%Y-%m-%d"), align="center", font=("weight"))
t.home()
s = d.second + d.microsecond * 0.000001
m = d.minute + s / 60
h = d.hour + m / 60
turtle.tracer(True)
second.setheading(6 * s)
minute.setheading(6 * m)
hour.setheading(30 * h)
turtle.ontimer(run,500)
def create(name,length,color):
turtle.reset()
skip(-length*0.1)
turtle.begin_poly()
turtle.forward(length*1.1)

turtle.end_poly()
#register
turtle.register_shape(name,turtle.get_poly())
hand = turtle.Turtle()
hand.pencolor(color)
hand.shape(name)
hand.shapesize(1,1,3)
return hand
if __name__ == '__main__':
turtle.mode('logo')#調整烏龜方向
turtle.hideturtle()#隱藏畫筆
global d,week,t,second,minute,hour#設置全局變量
second = create('second',140,"red")#秒鐘線
minute = create('minute',120,"yellow")#分鐘線
hour = create('hour',80,"green")#時鐘線
t = turtle.Turtle()#創建新turtle用來設置時鐘分鐘和秒鐘線
t.hideturtle()
t.penup()
run()
turtle.tracer(False)#取消動畫效果
draw()
turtle.mainloop()

最終運行的結果為:

python實現動態時鐘(附代碼可直接運行)


分享到:


相關文章: