漂亮的時鐘總是能夠給我們耳目一新的感覺,通過聊聊幾行代碼,就能夠實作一個漂亮的時鐘,難道不值得心動嗎?
閑話不多說,直接上Python完整源代碼。
import turtle
from turtle import *
from datetime import *
import math
# 移動到指定位置
def skip(step):
penup()
forward(step)
pendown()
# 繪制表盤資料
def drawNum(i):
penup()
if i == 0:
write('12', align='center', font=('Times New Roman', 20, 'normal', 'bold'))
else:
write(str(int(i / 5)), font=('Times New Roman', 20, 'normal', 'bold'))
pendown()
# 畫指針
def drawpointer(name, length):
reset()
skip(-length * 0.1)
begin_poly()
forward(length * 1.1)
end_poly()
handForm = get_poly()
register_shape(name, handForm)
# 初始化
def init():
global hrpointer, minpointer, secpointer, weektext
turtle.title("實時時鐘")
# 設定turtle Logo模式,朝北
mode("logo")
drawpointer("hrpointer", 80)
drawpointer("minpointer", 120)
drawpointer("secpointer", 140)
hrpointer = Turtle()
hrpointer.shape("hrpointer")
minpointer = Turtle()
minpointer.shape("minpointer")
minpointer.pencolor("blue")
secpointer = Turtle()
secpointer.shape("secpointer")
secpointer.pencolor("red")
for pointer in hrpointer, minpointer, secpointer:
pointer.shapesize(3, 1, 1)
pointer.speed(0)
# 文字輸出
weektext = Turtle()
weektext.hideturtle()
weektext.penup()
# 設定表盤形狀
def setupClock(radius):
reset()
# clockPanel = Turtle()
pensize(7)
pencolor("red")
for i in range(60):
skip(radius)
if i % 5 == 0:
drawNum(i)
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 Times(t):
h = t.hour
m = t.minute
s = t.second
hour = "0" + str(h) if h < 10 else str(h)
minute = "0" + str(m) if m < 10 else str(m)
second = "0" + str(s) if s < 10 else str(s)
return "%s:%s:%s" % (hour, minute, second)
# 繪制表針動态顯示
def tick():
t = datetime.today()
second = t.second + t.microsecond * 0.0000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secpointer.setheading(6 * second)
minpointer.setheading(6 * minute)
hrpointer.setheading(30 * hour)
tracer(False)
weektext.clear()
weektext.forward(65)
weektext.write(Week(t), align="center", font=("Times New Roman", 14, "bold"))
weektext.back(130)
weektext.write(Date(t), align="center", font=("Times New Roman", 14, "bold"))
weektext.back(30)
weektext.write(Times(t), align="center", font=("Times New Roman", 14, "bold"))
weektext.home()
tracer(True)
# 間隔100ms調用一次
ontimer(tick, 1000)
def main():
tracer(False)
init()
setupClock(160)
tracer(True)
tick()
mainloop()
if __name__ == '__main__':
main()
運作效果圖如下: