运用tkinter做一个钟表(动态)

# -*- coding: utf-8 -*-
# @Time     : 2020/1/29 16:56
# @Author   : LiuZe
# @File     : 钟表.py
# @Software : PyCharm


import tkinter as tk
import time
from tkinter import ARC
from math import *



def DQ_time():
    local_time = time.localtime(time.time())  # 当前时间
    if local_time[3]>=12:
        local_time_hour=local_time[3]-12
    # 当前时间的 时 分 秒
    local_time_minute = local_time[4]
    local_time_second = local_time[5]

    return [local_time_hour,local_time_minute,local_time_second]

root = tk.Tk()

canvas = tk.Canvas(root, width=350, height=350, bg='white')  # 创建一个画布,填充背景颜色为白色
# 画布的宽和高都为350
canvas.pack()

canvas.create_arc(53, 53, 297, 297, extent=359, style=ARC, width=2.0)  # 一个为左上角坐标 另一个为右下角坐标
canvas.create_line(175, 53, 175, 60, width=2.5)
canvas.create_line(53, 175, 60, 175, width=2.5)
canvas.create_line(290, 175, 297, 175, width=2.5)
canvas.create_line(175, 290, 175, 297, width=2.5)
# canvas.create_line(70,114,72.25,117.1,width=2.5)

sin_30 = cos_60 = 0.5
sin_60 = cos_30 = sqrt(3) / 2

canvas.create_text(175, 25, text='钟表', font=('楷体', 25, 'bold'))

canvas.create_line(175 - 122 * cos_30, 175 - 122 * sin_30, 175 - 122 * cos_30 + 5.5 * sin_30,
                   175 - 122 * sin_30 + 5.5 * cos_30, width=2.5)
canvas.create_line(175 - 122 * cos_60, 175 - 122 * sin_60, 175 - 122 * cos_60 + 5.5 * sin_60,
                   175 - 122 * sin_60 + 5.5 * cos_60, width=2.5)

canvas.create_line(175 + 122 * cos_30 - 5.5 * cos_30, 175 - 122 * sin_30 - 5.5 * sin_30, 175 + 122 * cos_30,
                   175 - 122 * sin_30, width=2.5)
canvas.create_line(175 + 122 * cos_60 - 5.5 * cos_60, 175 - 122 * sin_60 + 5.5 * sin_60, 175 + 122 * cos_60,
                   175 - 122 * sin_60, width=2.5)

canvas.create_line(175 - 122 * cos_30 + 5.5 * sin_30, 175 + 122 * sin_30 - 5.5 * cos_30, 175 - 122 * cos_30,
                   175 + 122 * sin_30, width=2.5)
canvas.create_line(175 - 122 * cos_60 + 5.5 * sin_60, 175 + 122 * sin_60 - 5.5 * cos_60, 175 - 122 * cos_60,
                   175 + 122 * sin_60, width=2.5)

canvas.create_line(175 + 122 * cos_30 - 5.5 * sin_30, 175 + 122 * sin_30 - 5.5 * cos_30, 175 + 122 * cos_30,
                   175 + 122 * sin_30, width=2.5)
canvas.create_line(175 + 122 * cos_60 - 5.5 * sin_60, 175 + 122 * sin_60 - 5.5 * cos_60, 175 + 122 * cos_60,
                   175 + 122 * sin_60, width=2.5)


while True:

    for JD_2 in range(DQ_time()[0],12):
        canvas.create_line(175, 175, 175 + 60 * sin((pi / 6) * JD_2), 175 - 60 * cos((pi / 6) * JD_2), arrow=tk.LAST,
                           width=5.5)
        canvas.update()

        for JD_1 in range(DQ_time()[1], 60):
            canvas.create_line(175, 175, 175 + 80 * sin((pi / 30) * JD_1), 175 - 80 * cos((pi / 30) * JD_1), arrow=tk.LAST,
                               width=2.5)
            canvas.update()


            for JD in range(DQ_time()[2], 60):
                canvas.create_line(175, 175, 175 + 100 * sin((pi / 30) * JD), 175 - 100 * cos((pi / 30) * JD), arrow=tk.LAST)
                canvas.update()
                time.sleep(0.9999)
                canvas.create_line(175, 175, 175 + 100 * sin((pi / 30) * JD), 175 - 100 * cos((pi / 30) * JD), fill='white',
                                   arrow=tk.LAST)
                # 再画一条线,使这条线盖住上一条线,颜色为白色
                # 秒针

            canvas.create_line(175, 175, 175 + 80 * sin((pi / 30) * JD_1), 175 - 80 * cos((pi / 30) * JD_1), fill='white',arrow=tk.LAST, width=2.5)
            # 再画一条线,使这条线盖住上一条线,颜色为白色
            # 分针

        canvas.create_line(175, 175, 175 + 60 * sin((pi / 6) * JD_2), 175 - 60 * cos((pi / 6) * JD_2), arrow=tk.LAST,
                           width=5.5,fill='white')
        # 时针

    root.mainloop()


注意:因为该表运行了for循环,所以会在这些方面上会花费一些时间,故显示的时间与标准会有一定出入。
如果大家觉得有什么改进的地方,记得评论。
运行结果:
在这里插入图片描述

发布了51 篇原创文章 · 获赞 299 · 访问量 9208

猜你喜欢

转载自blog.csdn.net/qq_45404396/article/details/104114362