100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 使用python第三方库turtle和datetime来制作动态罗马数字时钟

使用python第三方库turtle和datetime来制作动态罗马数字时钟

时间:2024-02-28 19:42:09

相关推荐

使用python第三方库turtle和datetime来制作动态罗马数字时钟

罗马数字动态时钟原理:将动态时钟看作一个圆,划作十二等分,每一等份放一个罗马数字。

import turtle as turtleimport datetime as datetimedef Skip(step):turtle.penup()turtle.forward(step)turtle.pendown()def stiak(name, length):# 注册Turtle形状,建立表针Turtleturtle.reset() # 清空当前窗口,并重置位置等信息为默认值Skip(-length * 0.1)turtle.begin_poly()turtle.forward(length * 1.1)turtle.end_poly()turtle.handForm = turtle.get_poly()turtle.register_shape(name, turtle.handForm)def Init():global secHand, minHand, hurHand, printerturtle.mode("logo") # 重置Turtle指向北# 建立三个表针Turtle并初始化stiak("secHand", 135)stiak("minHand", 110)stiak("hurHand", 90)secHand = turtle.Turtle()secHand.shape("secHand")minHand = turtle.Turtle()minHand.shape("minHand")hurHand = turtle.Turtle()hurHand.shape("hurHand")for hand in secHand, minHand, hurHand:hand.shapesize(1, 1, 3)hand.speed(0)# 建立输出文字Turtleprinter = turtle.Turtle()printer.hideturtle()printer.penup()def SetupClock(radius):# 建立表的外框turtle.reset()turtle.pensize(5)# turtle.begin_fill()# turtle.circle(100, extent=None, steps=None)# turtle.end_fill()list_f = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII']for i in range(60):Skip(radius)if i % 5 == 0:turtle.forward(30)Skip(-radius - 20)# 移动到刻度线终点Skip(radius + 20)#下面是写表盘刻度值,为了不与划线重叠,所以对于特殊位置做了处理# if i == 0:#turtle.write(list_f[11], align="center", font=("Courier", 14, "bold"))# elif i == 30:#Skip(25)#turtle.write(list_f[i/5], align="center", font=("Courier", 14, "bold"))#Skip(-25)# elif (i == 25 or i == 35):#Skip(20)#turtle.write(list_f[i/5], align="center", font=("Courier", 14, "bold"))#Skip(-20)# else:#turtle.write(list_f[i/5], align="center", font=("Courier", 14, "bold"))# if i == 0:#turtle.write(list_f[11], align="center", font=("Courier", 14, "bold"))# elif i == 30:#Skip(25)#turtle.write(list_f[i/5], align="center", font=("Courier", 14, "bold"))#Skip(-25)# elif (i == 25 or i == 35):#Skip(20)#turtle.write(list_f[i/5], align="center", font=("Courier", 14, "bold"))#Skip(-20)# else:#turtle.write(list_f[i/5], align="center", font=("Courier", 14, "bold"))if i==0 or i==60:df=list_f[11]turtle.write(df)elif i==5:df=list_f[0]turtle.write(df)elif i==10:df = list_f[1]turtle.write(df)elif i==15:df=list_f[2]turtle.write(df)elif i==20:df=list_f[3]turtle.write(df)elif i==25:df=list_f[4]turtle.write(df)elif i==30:df=list_f[5]turtle.write(df)elif i==35:df=list_f[6]turtle.write(df)elif i==40:df=list_f[7]turtle.write(df)elif i==45:df=list_f[8]turtle.write(df)elif i==50:df=list_f[9]turtle.write(df)elif i==55:df=list_f[10]turtle.write(df)# turtle.write(list_f[1])# turtle.write(list_f[2])# turtle.write(list_f[3])# turtle.write(list_f[4])Skip(-radius - 20)else:turtle.dot(5)Skip(-radius)turtle.right(6)def Week(t):week = ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]return week[t.weekday()]def Date(t):y = t.yearm = t.monthd = t.dayreturn "%s %d %d" % (y, m, d)def Tick():# 绘制表针的动态显示t = datetime.datetime.today()second = t.second + t.microsecond * 0.000001minute = t.minute + second / 60.0hour = t.hour + minute / 60.0secHand.setheading(6 * second) # 设置朝向,每秒转动6度minHand.setheading(6 * minute)hurHand.setheading(30 * hour)turtle.tracer(True) # 不显示绘制的过程,直接显示绘制结果printer.forward(65)printer.write(Week(t), align="center",font=("Courier", 14, "bold"))printer.back(130)printer.write(Date(t), align="center",font=("Courier", 14, "bold"))printer.back(50)printer.write("稀德出品", align="center",font=("Courier", 14, "bold"))printer.home()turtle.tracer(True)turtle.ontimer(Tick, 1000) # 1000ms后继续调用tickdef main():turtle.tracer(False) # 使多个绘制对象同时显示Init()SetupClock(160)turtle.tracer(True)Tick()turtle.mainloop()if __name__ == "__main__":main()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。