使用Python Turtle实现精确计时工具的图形化秒表创建指南
⏱️ 编程基础第一期《6-30》–简易计时器/秒表,这是一个使用Python的turtle和time模块实现的简易计时器/秒表程序,提供简洁的数字时间显示。
目录
🌟 功能特点
- 数字显示当前计时(时:分:秒.毫秒)
- 支持开始/暂停计时(空格键)
- 支持重置计时(R键)
- 状态显示(正在计时/已暂停/按空格键开始计时)
- 清晰的操作提示
🚀 使用方法
- 运行程序后,会显示初始时间(00:00:00.000)
- 按下空格键开始计时
- 再次按下空格键暂停计时
- 按下R键可以重置计时器回到00:00:00.000
🧩 程序架构设计
核心模块:
turtle
: 提供跨平台的图形化界面绘制功能time
: 提供高精度的系统时间获取功能设计模式:
算法原理:
💻 代码详解
窗口和画笔创建
import turtle
import time
# 设置窗口和基本参数
screen = turtle.Screen()
screen.title("简易计时器/秒表")
screen.bgcolor("black")
screen.setup(width=500, height=300)
screen.tracer(0) # 关闭自动刷新
# 创建显示时间的画笔
time_display = turtle.Turtle()
time_display.hideturtle() # 隐藏turtle的箭头图标,使绘图时只显示图形而不显示箭头
time_display.color("cyan") # 设置turtle绘图的颜色
time_display.penup() #抬起turtle的笔,这样移动turtle时不会绘制线条
time_display.goto(0, 30) # 将turtle移动到坐标(0, 30)的位置,准备从该点开始绘图或显示文本
# 创建状态显示的画笔
status_display = turtle.Turtle()
status_display.hideturtle()
status_display.speed(0)
status_display.color("white")
status_display.penup()
status_display.goto(0, -30)
# 创建操作提示的画笔
help_display = turtle.Turtle()
help_display.hideturtle()
help_display.speed(0)
help_display.color("yellow")
help_display.penup()
help_display.goto(0, -80)
help_display.write("空格键: 开始/暂停 | R键: 重置", align="center", font=("Arial", 14, "normal"))
# 初始化秒表变量
is_running = False
start_time = 0
accumulated_time = 0
应用知识点:
screen.tracer(0)
关闭自动刷新以提高性能时间和状态显示更新
# 更新时间显示
def update_time_display(elapsed_time):
hours = int(elapsed_time / 3600)
minutes = int((elapsed_time % 3600) / 60)
seconds = int(elapsed_time % 60)
milliseconds = int((elapsed_time * 1000) % 1000)
time_str = f"{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}"
time_display.clear()
time_display.write(time_str, align="center", font=("Arial", 40, "bold"))
# 更新状态显示
def update_status():
status_display.clear()
if is_running:
status = "正在计时..."
else:
if accumulated_time > 0:
status = "已暂停"
else:
status = "按空格键开始计时"
status_display.write(status, align="center", font=("Arial", 20, "normal"))
应用知识点:
计时器控制逻辑
def toggle_timer():
global is_running, start_time, accumulated_time
if is_running:
# 暂停计时
is_running = False
accumulated_time += time.time() - start_time
else:
# 开始计时
is_running = True
start_time = time.time()
update_status()
应用知识点:
global
关键字在函数内修改全局状态time.time()
获取高精度Unix时间戳计时器重置功能
def reset_timer():
global is_running, start_time, accumulated_time
is_running = False
accumulated_time = 0
start_time = 0
update_status()
update_time_display(0)
应用知识点:
事件监听设置
# 设置键盘事件
screen.listen()
screen.onkeypress(toggle_timer, "space") # 空格键开始/暂停
screen.onkeypress(reset_timer, "r") # R键重置
应用知识点:
listen()
方法启用事件监听主循环及运行控制
def main():
# 初始显示
update_status()
update_time_display(0)
while True:
if is_running:
elapsed_time = accumulated_time + (time.time() - start_time)
else:
elapsed_time = accumulated_time
update_time_display(elapsed_time)
screen.update()
time.sleep(0.01) # 小延迟减轻CPU负担
# 启动程序
if __name__ == "__main__":
try:
main()
except:
print("程序已退出")
turtle.done()
应用知识点:
while True
创建游戏主循环screen.update()
手动刷新画面time.sleep()
控制循环速率,减轻CPU负担if __name__ == "__main__":
确保直接运行时才执行主函数🚀总
import turtle
import time
# 设置窗口和基本参数
screen = turtle.Screen()
screen.title("简易计时器/秒表")
screen.bgcolor("black")
screen.setup(width=500, height=300)
screen.tracer(0) # 关闭自动刷新
# 创建显示时间的画笔
time_display = turtle.Turtle()
time_display.hideturtle() # 隐藏turtle的箭头图标,使绘图时只显示图形而不显示箭头
time_display.color("cyan") # 设置turtle绘图的颜色
time_display.penup() #抬起turtle的笔,这样移动turtle时不会绘制线条
time_display.goto(0, 30) # 将turtle移动到坐标(0, 30)的位置,准备从该点开始绘图或显示文本
# 创建状态显示的画笔
status_display = turtle.Turtle()
status_display.hideturtle()
status_display.speed(0)
status_display.color("white")
status_display.penup()
status_display.goto(0, -30)
# 创建操作提示的画笔
help_display = turtle.Turtle()
help_display.hideturtle()
help_display.speed(0)
help_display.color("yellow")
help_display.penup()
help_display.goto(0, -80)
help_display.write("空格键: 开始/暂停 | R键: 重置", align="center", font=("Arial", 14, "normal"))
# 初始化秒表变量
is_running = False
start_time = 0
accumulated_time = 0
# 更新时间显示
def update_time_display(elapsed_time):
hours = int(elapsed_time / 3600)
minutes = int((elapsed_time % 3600) / 60)
seconds = int(elapsed_time % 60)
milliseconds = int((elapsed_time * 1000) % 1000)
time_str = f"{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}"
time_display.clear()
time_display.write(time_str, align="center", font=("Arial", 40, "bold"))
# 更新状态显示
def update_status():
status_display.clear()
if is_running:
status = "正在计时..."
else:
if accumulated_time > 0:
status = "已暂停"
else:
status = "按空格键开始计时"
status_display.write(status, align="center", font=("Arial", 20, "normal"))
def toggle_timer():
global is_running, start_time, accumulated_time
if is_running:
# 暂停计时
is_running = False
accumulated_time += time.time() - start_time
else:
# 开始计时
is_running = True
start_time = time.time()
update_status()
def reset_timer():
global is_running, start_time, accumulated_time
is_running = False
accumulated_time = 0
start_time = 0
update_status()
update_time_display(0)
# 设置键盘事件
screen.listen()
screen.onkeypress(toggle_timer, "space") # 空格键开始/暂停
screen.onkeypress(reset_timer, "r") # R键重置
def main():
# 初始显示
update_status()
update_time_display(0)
while True:
if is_running:
elapsed_time = accumulated_time + (time.time() - start_time)
else:
elapsed_time = accumulated_time
update_time_display(elapsed_time)
screen.update()
time.sleep(0.01) # 小延迟减轻CPU负担
# 启动程序
if __name__ == "__main__":
try:
main()
except:
print("程序已退出")
turtle.done()
效果:
✨今日分享语录
“低级的欲望靠放纵,高级的欲望靠自律。”
作者:笨笨轻松熊