计时器(Python)

news2025/1/21 1:04:42

代码

import time
from tkinter import ttk
import threading
from tkinter import scrolledtext
import tkinter as tk


class TimerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("计时器")
        self.screen_w, self.screen_h = self.root.winfo_screenwidth(), self.root.winfo_screenheight()
        self.w, self.h = int(self.screen_w / 3), int(self.screen_h / 3)
        self.root.geometry(f'{self.w}x{self.h}+{int(self.screen_w / 4)}+{int(self.screen_h / 4)}')
        self.root.resizable(False, False)

        self.running = False
        self.paused = False
        self.start_time = None
        self.pause_time = None
        self.count = 0

        self.time_label = ttk.Label(
            self.root, text="0.0000", font=("微软雅黑", 32), foreground="#FFFFFF", background="#c9d8ee")
        self.time_label.place(relx=.4, rely=.2)
        self.box = scrolledtext.ScrolledText(self.root, width=12, height=10)
        self.box.place(relx=.1, rely=.3)

        ttk.Button(self.root, text="Start", command=self.start_timer, width=8).place(relx=.4, rely=.5)
        ttk.Button(self.root, text="Pause", command=self.pause_timer, width=8).place(relx=.4, rely=.6)
        ttk.Button(self.root, text="Continue", command=self.continue_timer, width=8).place(relx=.55, rely=.6)
        ttk.Button(self.root, text="Stop", command=self.stop_timer, width=8).place(relx=.55, rely=.5)
        ttk.Button(self.root, text="Clear", command=self.clear_box, width=5).place(relx=.18, rely=.79)
        ttk.Button(self.root, text="Get", command=self.insert_timer, width=8).place(relx=.4, rely=.7)
        ttk.Button(self.root, text="Restore", command=self.restore_time_label, width=8
                   ).place(relx=.55, rely=.7)
        ttk.Button(self.root, text="Close", command=lambda: self.root.destroy(), width=8).place(relx=.85, rely=.9)

    def restore_time_label(self):
        self.stop_timer()
        self.time_label.config(text="0.0000")

    def clear_box(self):
        self.count = 0
        self.box.delete("1.0", "end")

    def start_timer(self):
        if not self.running:
            self.running = True
            self.start_time = time.perf_counter()
            self.time_thread = threading.Thread(target=self.update_time)
            self.time_thread.start()

    def pause_timer(self):
        if self.running and not self.paused:
            self.paused = True
            self.pause_time = time.perf_counter()
            # self.count += 1
            # self.box.insert("end", "<{0}>{1:.4f}\n".format(self.count, self.main_time))

    def insert_timer(self):
        if self.main_time and self.running:
            self.count += 1
            self.box.insert("end", "<{0}>{1:.4f}\n".format(self.count, self.main_time))

    def continue_timer(self):
        if self.paused:
            self.paused = False
            self.start_time += time.perf_counter() - self.pause_time

    def stop_timer(self):
        self.running = False
        self.paused = False
        try:
            if self.time_thread is not None:
                self.time_thread.join()
                # self.time_label.config(text="0.0000")
        except AttributeError:
            self.root.destroy()

    def update_time(self):
        while self.running:
            if not self.paused:
                self.main_time = time.perf_counter() - self.start_time
                self.time_label.config(text="{:.4f}".format(self.main_time))
            time.sleep(0.1)

    def on_closing(self):
        self.stop_timer()
        self.root.destroy()


if __name__ == "__main__":
    root = tk.Tk()
    app = TimerApp(root)
    root.protocol("WM_DELETE_WINDOW", app.on_closing)
    root.mainloop()

 效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Conditional Detr

encoder和detr相同&#xff0c;只修改了decoder部分。

(STM32笔记)九、RCC时钟树与时钟 第一部分

我用的是正点的STM32F103来进行学习&#xff0c;板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话&#xff0c;用的也是这个板子和教程。 九、RCC时钟树与时钟 九、RCC时钟树与时钟1、时钟树HSE时钟HSI时钟锁相环时钟系统时钟HCLK时钟PCLK1时钟PCLK2时钟RTC时钟独…

iPhone苹果手机Safari浏览器怎么收藏网页?

iPhone苹果手机Safari浏览器怎么收藏网页? 1、iPhone苹果手机上找到并打开Safari浏览器&#xff0c;并访问要收藏的网页&#xff1b; 2、打开网页后&#xff0c;点击导航上的更多功能&#xff1b; 3、在更多里&#xff0c;找到并点击添加到个人收藏&#xff0c;完成储存即可添…

2023华为od机试C卷【分配土地】Python实现

思路&#xff1a; 我们可以用哈希结构&#xff0c;此题适合用字典&#xff0c;键为出现的非零数字&#xff0c;值为列表&#xff0c;列表为【minrow,maxrow,minrol,maxrol] import sys def main():m,n map(int,input().split())rects {}for i in range(m):nums [int(i) f…

EFK之filebeat用法进阶

接上一章节&#xff1a;https://blog.csdn.net/weixin_46546303/article/details/140279197?spm1001.2014.3001.5501 一、filebeat module 输入流 1.filebeat module作用 Filebeat 模块的主要作用是简化日志数据的收集和处理过程。通过使用模块&#xff0c;你可以快速地配置…

java计算机毕设课设—网上招聘系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; java计算机毕设课设—网上招聘系统&#xff08;附源码、文章、相关截图、部署视频&#xff09; 网上招聘系统的设计与实现旨在提供一个便捷、高效的在线平台&#xff0c;使个人求职者和公司能够有效地进行职位申请和人才招聘。该系统特别设计了两种…

Golang | Leetcode Golang题解之第318题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; func maxProduct(words []string) (ans int) {masks : map[int]int{}for _, word : range words {mask : 0for _, ch : range word {mask | 1 << (ch - a)}if len(word) > masks[mask] {masks[mask] len(word)}}for x, lenX : ra…

狮子鱼 CMS ApiController.class.php SQL 注入漏洞

本章提供的所有内容仅供学习、交流和分享用途&#xff0c;只供参考。本站资源禁止并谢绝未经本站许可的使用&#xff0c;如若欲转载&#xff0c;请署名以及注明出处&#xff0c;请务必以文字链接的形式标明或保留文章原始出处和作者的信息。本站(原创)文章、资源、图片等所有内…

嵌入式全栈开发学习笔记---数据结构(顺序表)

目录 顺序结构 顺序表初始化 顺序表插入 顺序表遍历操作 顺序表前驱和后继 顺序表查找操作 顺序表删除操作 顺序表清空销毁 顺序表销毁操作 完整代码 List.c List.h Main.c 顺序表优缺点&#xff08;面试可能会考&#xff09; 上一节我们介绍了数据结构的一般概念…

【ModelSim】仿真问题记录

1、波形出不全&#xff1a; 1、甚至连clk波形都出不来 2、个别波形只有到仿真结束的时候才出现 解决办法&#xff1a; 1、添加波形需要是实例中的net 2、排查是否存在声明与示例的位宽不一致的信号 3、观察是否存在未初始化的变量寄存器 4、缩短整个仿真的步长 2、Instance列…

【HBZ分享】spring启动时自动装配的位置

自动装配流程 springboot启动时&#xff0c;自动装配逻辑在SpringBootApplication这个符合注解中的EnableAutoConfiguration新版springboot3会扫描META-INF的spring文件夹下的org.springframework.boot,autoconfigure,AutoConfiguration.imports文件&#xff0c;会把这里所有写…

FSMC--灵活的静态存储控制器

&#xff08;1&#xff09;在STM32F1系列&#xff08;及F407&#xff09;的芯片上封装了FSMC外设&#xff0c;支持拓展SARM作为RAM。 &#xff08;2&#xff09;SRAM和SDRAM的区别&#xff1a; 存储结构&#xff1a;SRAM使用锁存器、SDRAM使用电容通讯方式&#xff1a;SRAM多…

Leaf分布式ID

文章目录 系统对Id号的要求UUIDsnowflakeLeafLeaf-snowflakeLeaf-segmentMySQL自增主键segment双buffer 系统对Id号的要求 1、业务 1&#xff09;全局唯一性&#xff1a;不能出现重复的ID号&#xff0c;既然是唯一标识&#xff0c;这是最基本的要求 2&#xff09;趋势递增&a…

使用LLM(Large Language Model)进行主题建模

随着互联网技术的快速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域取得了显著的进步。其中&#xff0c;大型语言模型&#xff08;LLM&#xff09;在文本生成任务中表现尤为抢眼。本文旨在探讨LLM在主题建模方面的优势&#xff0c;以及如何将其应用于文本生成任…

深度图进行运算检测物体表面粗糙度

文章目录 应用场景算法原理核心代码应用场景 不同程度凹凸的零件表面粗糙度对零件的磨损产生影响,很大程度上关系到产品性能和使用寿命。不同于单独使用的产品,零件需要在装配中与其他零件相连,密封性和磨损量是厂商需要考虑的一大加工要素;其次,产品外观和触感也会影响到…

数据结构链表2(常考习题1)(C语言)

移除链表元素&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 解题思路&#xff1a; 情况1&#xff1a; 情…

【vluhub】skywalking

SkyWalking是一个开源监控平台&#xff0c;用于从服务和云原生基础设施收集、分析、聚合和可视化数据 低版本存在sql注入漏洞 访问地址 http://192.168.203.12:8080/graphql burpsuite抓数据包 替换 {"query":"query queryLogs($condition: LogQueryConditi…

安装STM32开发工具:STM32CubeMX、STM32CubeIDE、STM32CubeCLT

ST官网地址&#xff1a;https://www.st.com/content/st_com/en.html ST官网因为链接原因下载会比较慢&#xff0c;推荐使用STMCU中文官网&#xff0c;下载很通畅&#xff1a;STMCU中文官网 安装Java 在安装STM32开发软件STM32CubeMX和STM32CubeIDE、STM32CubeCTL之前&#x…

浏览器事件循环详解

1. 浏览器的进程模型 1.1. 何为进程&#xff1f; 程序运行需要有它自己的专属内存空间&#xff0c;可以把这块内存空间简单的理解为进程。 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 1.2. 何为线程&#xff1f…

【Linux】进程间通信(3):共享内存

目录 一、共享内存概述 二、共享内存相关函数 1、shmget函数 2、ftok函数 3、shmctl函数 4、 shmat函数 5、 shdt函数 三、使用共享内存相关函数管理共享内存的一般过程 1. 生成唯一的键值 2. 创建或获取共享内存段 3. 连接到共享内存段 4. 操作共享内存 5. 断开…