python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python计时

Python使用Turtle实现精确计时工具

作者:笨笨轻松熊

这篇文章主要为大家详细介绍了Python如何使用Turtle实现精确计时工具,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下

功能特点

数字显示当前计时(时:分:秒.毫秒)

支持开始/暂停计时(空格键)

支持重置计时(R键)

状态显示(正在计时/已暂停/按空格键开始计时)

清晰的操作提示

使用方法

运行程序后,会显示初始时间(00:00:00.000)

按下空格键开始计时

再次按下空格键暂停计时

按下R键可以重置计时器回到00:00:00.000

程序架构设计

1.核心模块:

turtle: 提供跨平台的图形化界面绘制功能

time: 提供高精度的系统时间获取功能

2.设计模式:

采用事件驱动编程模型,通过键盘事件触发状态变更

利用全局状态管理计时器状态

3.算法原理:

时间计算:利用系统时间差值计算经过时间

状态管理:使用布尔变量控制计时器运行状态

代码详解

窗口和画笔创建

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() 

应用知识点:

完整代码

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() 

效果:

到此这篇关于Python使用Turtle实现精确计时工具的文章就介绍到这了,更多相关Python计时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文