# -*- coding: utf-8 -*-
'''使用turtle库绘制动态时钟'''
## 导入库
import turtle as t
from datetime import *
########### 定义函数 ###########
def Skip(step):
t.penup()
t.forward(step)
t.pendown()
def Date(tim):
y = tim.year
m = tim.month
d = tim.day
return "%s %d% d" % (y, m, d)
def Week(tim):
week = ["星期一", "星期二", "星期三", "星期四", "星期五",
"星期六", "星期日"]
return week[tim.weekday()]
#### 绘制表框
def SetupClock():
t.mode("logo") # logo模式
t.setup(600, 600, 10, 100) # 画布大小600*600 起始点的坐标 窗口的宽度,
t.dot(10)
t.seth(-90)
Skip(200)
t.pensize(3)
t.seth(0)
t.circle(-200) #钟表外框半径:200
t.seth(90)
Skip(50)
t.dot(5)
t.seth(0)
for _ in range(59):
t.pu()
t.circle(-150, 6)
t.pd()
t.dot(5)
t.pu()
# 画12条线段 写上对应的时间数字
t.home()
t.pensize(5)
t.seth(30)
for i in range(12):
t.fd(150)
t.pd()
t.fd(10)
if(i<2 or i>8):
Skip(5)
elif(i==2 or i==8):
Skip(10)
elif (i == 3 or i == 7):
Skip(20)
else:
Skip(25)
t.write(i + 1, align="center", font=('Courier', 15, 'bold')) # 写上对应的时间数字
t.up()
t.setx(0)
t.sety(0)
t.rt(30)
#### 定义指针(秒 分 时)形状
def makePoint(pointName,length):
t.home()
t.pu()
t.begin_poly()
t.back(0.1 * length)
t.forward(length * 1.1)
t.end_poly()
poly = t.get_poly()
t.register_shape(pointName, poly)
t.home()
#### 绘制指针
def drawPoint():
global hourPoint, minPoint, secPoint, fontWriter
makePoint("HourPoint",80,)
makePoint("MinutePoint", 110)
makePoint("secondPoint", 140)
t.hideturtle()
hourPoint = t.Pen()
hourPoint.shape("HourPoint")
hourPoint.shapesize(1, 1, 4) #时针的宽,长和轮廓
minPoint = t.Pen() #分针
minPoint.shape("MinutePoint")
minPoint.shapesize(1, 1, 3)
secPoint = t.Pen() #秒针
secPoint.shape("secondPoint")
secPoint.shapesize(1, 1, 2)
secPoint.pencolor('red')
fontWriter = t.Pen() #write项
fontWriter.hideturtle()
#### 绘制时间及指针
def ShowTime():
tim = datetime.today() # 获得当前日期
curr = datetime.now() # 日期-时间
curr_hour = curr.hour
curr_minute = curr.minute
curr_second = curr.second
t.tracer(False) #直接显示绘制结果
hourPoint.setheading(curr_hour*30+ 30 / 60 * curr_minute)
minPoint.setheading(curr_minute*6)
secPoint.setheading(curr_second*6)
fontWriter.clear()
fontWriter.up()
# 写日期
fontWriter.setx(0)
fontWriter.sety(-50)
fontWriter.write(Date(tim), align="center", font=("Courier", 15, "bold"))
# 写时间
fontWriter.setx(0)
fontWriter.sety(-70)
fontWriter.write(str(tim.hour) + ":" + str(tim.minute) + ":" + str(tim.second), align="center", font=("Courier", 15, "bold"))
# 写星期
fontWriter.setx(0)
fontWriter.sety(60)
fontWriter.write(Week(tim), align="center", font=("Courier", 15, "bold"))
t.tracer(True)
t.ontimer(ShowTime, 100)
def main():
t.tracer(False) # 不显示绘制的过程
SetupClock() #绘制表框
drawPoint()
t.tracer(True) # 显示绘制的过程
ShowTime()
t.done()
if __name__ == "__main__":
main()
Python动态时钟
于 2022-12-02 22:22:28 首次发布