天天看點

Python完整源代碼!漂亮的實時時鐘!絕對好用

作者:紫氣之巅

漂亮的時鐘總是能夠給我們耳目一新的感覺,通過聊聊幾行代碼,就能夠實作一個漂亮的時鐘,難道不值得心動嗎?

閑話不多說,直接上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()
           

運作效果圖如下:

Python完整源代碼!漂亮的實時時鐘!絕對好用