当前位置: 首页 > news >正文

番茄项目2:阶段性目标——用纯python完成这个项目

前两天为完成这个项目做了初步的尝试,结果发现要修改下原先的设想。
我原先是计划直接做web项目的,但是经过几天研究后,发现要想做番茄工作法这种web项目,需要有不少的javascript代码,甚至用纯javascript也可以开发出挺好的效果,但是无奈我不太擅长javascript,也不想一边做项目,一边学 javascript,这样难度太大,于是我改变了想法,先用纯python完成项目,在设计完善后,移植到web平台。

因为其实光把这个项目做的比较完善就有许多需要思想的地方,如果在项目进行中再考虑代码怎么写,那就大大加在了开发的难度。

今天先写完成了生成计时器的代码:

import tkinter as tk
from datetime import timedeltaclass CountdownTimer:def __init__(self, master):self.master = mastermaster.title("专注时钟 (25分钟)")master.geometry("500x300")# 初始时间设置 (25分钟)self.total_seconds = 25 * 60  # 使用秒数作为基础计时单位self.is_running = Falseself.timer_id = None# 时间显示标签self.time_label = tk.Label(master, text=self.format_time(), font=('Arial', 48))self.time_label.pack(pady=20)# 按钮框架button_frame = tk.Frame(master)button_frame.pack()# 控制按钮self.start_btn = tk.Button(button_frame, text="开始", command=self.start_timer)self.start_btn.pack(side=tk.LEFT, padx=10)self.pause_btn = tk.Button(button_frame, text="暂停", command=self.pause_timer)self.pause_btn.pack(side=tk.LEFT, padx=10)self.stop_btn = tk.Button(button_frame, text="停止", command=self.stop_timer)self.stop_btn.pack(side=tk.LEFT, padx=10)def format_time(self):"""将秒数格式化为 MM:SS 形式"""minutes = self.total_seconds // 60seconds = self.total_seconds % 60return f"{minutes:02d}:{seconds:02d}"def update_timer(self):if self.total_seconds > 0 and self.is_running:self.total_seconds -= 1self.time_label.config(text=self.format_time())self.timer_id = self.master.after(1000, self.update_timer)elif self.total_seconds <= 0:self.stop_timer()self.time_label.config(text="时间到!", fg='red')def start_timer(self):if not self.is_running and self.total_seconds > 0:self.is_running = Trueself.update_timer()def pause_timer(self):if self.is_running:self.is_running = Falsedef stop_timer(self):self.is_running = Falseself.total_seconds = 25 * 60  # 重置为25分钟self.time_label.config(text=self.format_time(), fg='black')if __name__ == "__main__":root = tk.Tk()app = CountdownTimer(root)root.mainloop()

下一步,我将完成任务列表的功能。

http://www.lryc.cn/news/603433.html

相关文章:

  • Vue3 状态管理新选择:Pinia 从入门到实战
  • 【JavaScript】手写 Object.prototype.toString()
  • 利用对称算法及非对称算法实现安全启动
  • C++异常捕获:为何推荐按引用(by reference)捕获?
  • 机器学习 线性回归算法及案例实现
  • Generative AI in Game Development
  • 信号上升沿时间与频谱分量的关系
  • 多线程--关于锁的一些知识考点
  • NumPy 2.x 完全指南【三十】整数数组索引
  • 5.1 动⼿实现⼀个 LLaMA2 ⼤模型
  • Effective C++ 条款10:令operator=返回一个reference to *this
  • 【Java面试题】面向对象
  • Kubernetes 高级调度 01
  • 实现多路标注截图
  • WMS仓储管理系统在不良品管理中的优化策略
  • OpenCL - study - code04 canny
  • C++基础:模拟实现priority_queue(堆),详细介绍仿函数
  • Python 程序设计讲义(29):字符串的处理方法——大小写转换
  • 网络数据传输与NAT技术的工作原理
  • 计算机网络五层模型
  • 【微信小程序】12、生物认证能力
  • .gitignore 添加 vue.config.js 时不好使
  • 微信小程序无法构建npm,可能是如下几个原因
  • Excel批量加密工具,一键保护多个文件
  • 聚观早报 | 三星获特斯拉AI芯片订单;小米16首发成安卓最强SOC;iPhone 17 Pro支持8倍光学变焦
  • 递归推理树(RR-Tree)系统:构建认知推理的骨架结构
  • [leetcode] 实现 Trie (前缀树)
  • 开发避坑短篇(8):Java Cookie值非法字符异常分析与解决方案:IllegalArgumentException[32]
  • 【C#获取高精度时间】
  • 智能落地扇方案:青稞RISC-V电机 MCU一览