python 简易时钟
2023-02-18 16:36:23 时间
1.导入模块
'''导入模块'''
import turtle
import datetime
turtle模块:它可以让你使用海龟图形(turtle graphics)绘制图像
datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
2.设计时钟
'''悬空移动'''
def move(distance):
turtle.penup()
turtle.forward(distance)
turtle.pendown()
'''创建表针turtle'''
def createHand(name, length):
turtle.reset()
move(-length * 0.01)
turtle.begin_poly()
turtle.forward(length * 1.01)
turtle.end_poly()
hand = turtle.get_poly()
turtle.register_shape(name, hand)
'''创建时钟'''
def createClock(radius):
turtle.reset()
turtle.pensize(7)
for i in range(60):
move(radius)
if i % 5 == 0:
turtle.forward(20)
move(-radius-20)
else:
turtle.dot(5)
move(-radius)
turtle.right(6)
'''获得今天是星期几'''
def getWeekday(today):
return ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'][today.weekday()]
'''获得今天的日期'''
def getDate(today):
return '%s年%s月%s日' % (today.year, today.month, today.day)
'''动态显示表针'''
def startTick(second_hand, minute_hand, hour_hand, printer):
today = datetime.datetime.today()
second = today.second + today.microsecond * 1e-6
minute = today.minute + second / 60.
hour = (today.hour + minute / 60) % 12
# 设置朝向
second_hand.setheading(6 * second)
minute_hand.setheading(6 * minute)
hour_hand.setheading(12 * hour)
turtle.tracer(False)
printer.forward(65)
printer.write(getWeekday(today), align='center', font=("Courier", 14, "bold"))
printer.forward(120)
printer.write('12', align='center', font=("Courier", 14, "bold"))
printer.back(250)
printer.write(getDate(today), align='center', font=("Courier", 14, "bold"))
printer.back(145)
printer.write('6', align='center', font=("Courier", 14, "bold"))
printer.home()
printer.right(92.5)
printer.forward(200)
printer.write('3', align='center', font=("Courier", 14, "bold"))
printer.left(2.5)
printer.back(400)
printer.write('9', align='center', font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True)
# 100ms调用一次
turtle.ontimer(lambda: startTick(second_hand, minute_hand, hour_hand, printer), 100)
3.运行时钟
'''开始运行时钟'''
def start():
# 不显示绘制时钟的过程
turtle.tracer(False)
turtle.mode('logo')
createHand('second_hand', 150)
createHand('minute_hand', 125)
createHand('hour_hand', 85)
# 秒, 分, 时
second_hand = turtle.Turtle()
second_hand.shape('second_hand')
minute_hand = turtle.Turtle()
minute_hand.shape('minute_hand')
hour_hand = turtle.Turtle()
hour_hand.shape('hour_hand')
for hand in [second_hand, minute_hand, hour_hand]:
hand.shapesize(1, 1, 3)
hand.speed(0)
# 用于打印日期等文字
printer = turtle.Turtle()
printer.hideturtle()
printer.penup()
createClock(160)
# 开始显示轨迹
turtle.tracer(True)
startTick(second_hand, minute_hand, hour_hand, printer)
turtle.mainloop()
if __name__ == '__main__':
start()
4.展示效果
相关文章
- [Python] 函数基本
- [Python] 使用dict和set
- [Python] Python基础字符串
- Python 绑定:从 Python 调用 C 或 C++
- Python 没有函数重载?如何用装饰器实现函数重载?
- [oeasy]python0028_直接运行_修改py文件执行权限_设置py文件打开方式
- 这15个顶级Python库,你必须要试试!
- ikun必学!python 画一个简单的只因
- 技术实践:教你用Python搭建gRPC服务
- 带你掌握4种Python 排序算法
- 一文讲全了Python 类和对象内容
- 什么是Python中的套接字编程?
- [Python]介绍
- [Python]第一章(建议收藏)
- 【Python】第二章(条件语句和循环语句)
- [Python]第三章(字符串) ---【建议收藏】
- (一)Python基本语法元素
- (二)Python基础结构
- (四)Python: NumPy中的ndarry
- (五)Python:Pandas中的Series