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

【开发学习】如何使用deepseek创建记录事件时间的PC应用程序

本文记录了尝试使用deepseek创建应用程序的过程,实现记录事件&时间的PC应用程序,包括创建代码、测试及调整。

目的:创建一个应用,用户输入文本提交,应用记录下时间和文本,数据留存在excel和应用程序中。

1. 使用deepseek生成代码

命令如下:

帮我写一个应用程序,实现的功能是,用户输入一段文字,然后应用程序会记录下输入的文字和时间,记录的数据会留在桌面的excel表格中。用户输入的文字和时间也会显示在应用程序的页面。使用python代码写,在win10的系统下可以运行。

2. 测试代码是否可运行

import tkinter as tk
from tkinter import messagebox, ttk
from datetime import datetime
import os
import openpyxldef save_to_excel(text, timestamp):# 获取桌面路径desktop = os.path.join(os.path.expanduser('~'), 'Desktop')file_path = os.path.join(desktop, 'user_input_records.xlsx')# 检查文件是否存在if not os.path.exists(file_path):# 创建新工作簿并添加标题wb = openpyxl.Workbook()ws = wb.activews.append(['时间', '用户输入'])else:wb = openpyxl.load_workbook(file_path)ws = wb.active# 添加新记录ws.append([timestamp, text])try:wb.save(file_path)except PermissionError:messagebox.showerror("错误", "请先关闭Excel文件再操作!")return Falsereturn Truedef submit_text():input_text = entry.get().strip()if not input_text:messagebox.showwarning("警告", "请输入内容!")returntimestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')if save_to_excel(input_text, timestamp):# 在列表框最前面插入新记录history_listbox.insert(0, f"{timestamp} - {input_text}")entry.delete(0, tk.END)def create_gui():window = tk.Tk()window.title("用户输入记录器")window.geometry("600x400")# 使用ttk样式style = ttk.Style()style.theme_use('clam')# 输入区域input_frame = ttk.Frame(window)input_frame.pack(pady=10, padx=10, fill=tk.X)ttk.Label(input_frame, text="输入内容:").pack(side=tk.LEFT)global entryentry = ttk.Entry(input_frame, width=40)entry.pack(side=tk.LEFT, padx=5)entry.bind('<Return>', lambda event: submit_text())  # 绑定回车键submit_btn = ttk.Button(input_frame, text="提交", command=submit_text)submit_btn.pack(side=tk.LEFT, padx=5)# 历史记录区域history_frame = ttk.Frame(window)history_frame.pack(pady=10, padx=10, fill=tk.BOTH, expand=True)ttk.Label(history_frame, text="历史记录:").pack(anchor=tk.W)global history_listboxhistory_listbox = tk.Listbox(history_frame, height=10, selectmode=tk.SINGLE,font=('Microsoft YaHei', 10))history_listbox.pack(fill=tk.BOTH, expand=True, pady=5)# 添加滚动条scrollbar = ttk.Scrollbar(history_listbox)scrollbar.pack(side=tk.RIGHT, fill=tk.Y)history_listbox.config(yscrollcommand=scrollbar.set)scrollbar.config(command=history_listbox.yview)# 退出按钮exit_btn = ttk.Button(window, text="退出", command=window.destroy)exit_btn.pack(pady=5)# 加载已有历史记录desktop = os.path.join(os.path.expanduser('~'), 'Desktop')file_path = os.path.join(desktop, 'user_input_records.xlsx')if os.path.exists(file_path):try:wb = openpyxl.load_workbook(file_path)ws = wb.activefor row in ws.iter_rows(min_row=2, values_only=True):if row[0] and row[1]:history_listbox.insert(0, f"{row[0]} - {row[1]}")except Exception as e:messagebox.showerror("错误", f"读取历史记录失败: {str(e)}")window.mainloop()if __name__ == "__main__":# 检查依赖库try:import openpyxlexcept ImportError:print("请先安装依赖库:pip install openpyxl")exit(1)create_gui()

3. 对代码进行打包

1)准备icon,将以上代码存为.py文件,在桌面创建一个文件夹【TextRecorder】,放入py文件和icon图标,icon图标命名为【app.ico】。

2)  环境变量检查,及必要库安装
按 ​Win + R 打开运行窗口,输入 cmd 打开命令行,执行以下命令确保没有问题:

# 升级pip
python -m pip install --upgrade pip# 安装必要库
pip install pyinstaller openpyxl# 验证安装
pyinstaller --version

如果以上的命令有无法运行的情况,可能出现的情况及解决方案如下:

情况1:xxx不是内部或外部命令,也不是可运行的程序 或批处理文件。

解决方案:环境变量配置有问题,需要到系统中重新配置环境变量的地址。容易出现的问题是找不到python的地址,通常的路径是:

C:\Users\你的用户名\AppData\Local\Programs\Python\Python310
C:\Users\你的用户名\AppData\Local\Programs\Python\Python310\Scripts

如果不是以上地址,在命令栏中输入以下命令,则显示python地址:

where python

实在找不到python就重装,重装时勾选 "Add Python to PATH"。

 情况2:单条命令行运行报错

解决方案:再执行一遍

3)代码打包

在项目文件夹【TextRecorder】中打开命令行:

  • 按住 Shift + 右键 → 选择 ​在此处打开 PowerShell 窗口
  • 输入“cmd”切换为CMD

执行打包命令:

# 进阶版(带图标,需确认图标文件名正确)
pyinstaller --onefile --noconsole --name "TextRecorder" --icon=app.ico text_recorder.py

4. 检查打包文件

  1. 打包完成后:

    • 打开项目文件夹中的 dist 子文件夹
    • 找到生成的 TextRecorder.exe 文件
  2. 测试运行:

    • 双击运行EXE文件
    • 检查桌面是否生成 user_input_records.xlsx

可能出现的问题:桌面未生成文件。

这个问题出现的原因是修改了桌面位置到非C盘,以上的python代码只会读取C盘下的桌面地址。

5. 增加历史记录删除功能

在使用应用程序时,如果输入错误想删除,则需要在应用程序中加上删除功能。而上面的代码是不支持的,调整后代码如下:

修改后问题:打开程序时,明显变慢。第一版的大小只有9M,第二版有200+M

import tkinter as tk
from tkinter import ttk, messagebox
import openpyxl
from datetime import datetime
import os# 获取桌面路径
DESKTOP_PATH = os.path.join(os.path.expanduser("~"), "Desktop")
FILE_PATH = os.path.join(DESKTOP_PATH, "records.xlsx")  # 强制保存到桌面
COLUMNS = ("timestamp", "content")def init_excel():if not os.path.exists(FILE_PATH):try:wb = openpyxl.Workbook()ws = wb.activews.append(["时间戳", "记录内容"])wb.save(FILE_PATH)print(f"已创建新文件于桌面:{FILE_PATH}")  # 调试信息except PermissionError:messagebox.showerror("错误", "无法在桌面创建文件,请检查写权限")class RecordApp:def __init__(self, root):self.root = rootself.root.title("桌面记录管理系统")# 显示文件路径path_frame = ttk.Frame(self.root)path_frame.pack(pady=5, fill=tk.X)ttk.Label(path_frame, text=f"数据文件位置:").pack(side=tk.LEFT)ttk.Label(path_frame, text=FILE_PATH, foreground="blue").pack(side=tk.LEFT)self.create_widgets()self.load_records()def create_widgets(self):# 输入区域input_frame = ttk.Frame(self.root, padding=(10, 5))input_frame.pack(fill=tk.X)ttk.Label(input_frame, text="新记录:").pack(side=tk.LEFT)self.entry = ttk.Entry(input_frame, width=50)self.entry.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)self.entry.bind("<Return>", lambda e: self.save_record())# 操作按钮btn_frame = ttk.Frame(self.root, padding=(10, 5))btn_frame.pack(fill=tk.X)ttk.Button(btn_frame, text="提交", command=self.save_record).pack(side=tk.LEFT)ttk.Button(btn_frame, text="删除选中", command=self.delete_selected).pack(side=tk.LEFT, padx=5)ttk.Button(btn_frame, text="刷新", command=self.load_records).pack(side=tk.LEFT)# 记录表格tree_frame = ttk.Frame(self.root)tree_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)self.tree = ttk.Treeview(tree_frame,columns=COLUMNS,show="headings",selectmode="browse",height=15)# 配置列self.tree.heading("timestamp", text="时间戳", anchor=tk.W)self.tree.heading("content", text="内容", anchor=tk.W)self.tree.column("timestamp", width=180, stretch=False)self.tree.column("content", width=500)# 滚动条vsb = ttk.Scrollbar(tree_frame, orient="vertical", command=self.tree.yview)self.tree.configure(yscrollcommand=vsb.set)# 布局self.tree.grid(row=0, column=0, sticky="nsew")vsb.grid(row=0, column=1, sticky="ns")tree_frame.grid_columnconfigure(0, weight=1)tree_frame.grid_rowconfigure(0, weight=1)def save_record(self):content = self.entry.get().strip()if not content:messagebox.showwarning("输入错误", "记录内容不能为空")returntimestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")try:wb = openpyxl.load_workbook(FILE_PATH)ws = wb.activews.append([timestamp, content])wb.save(FILE_PATH)self.entry.delete(0, tk.END)self.load_records()  # 静默刷新except PermissionError:messagebox.showerror("错误", "文件被占用,请关闭Excel后重试")except Exception as e:messagebox.showerror("错误", f"保存失败:{str(e)}")def load_records(self):for item in self.tree.get_children():self.tree.delete(item)try:wb = openpyxl.load_workbook(FILE_PATH)ws = wb.activerecords = []for row in ws.iter_rows(min_row=2):if row[0].value and row[1].value:records.append((row[0].value, row[1].value))# 按时间倒序records.sort(key=lambda x: datetime.strptime(x[0], "%Y-%m-%d %H:%M:%S"),reverse=True)for record in records:self.tree.insert("", tk.END, values=record)except FileNotFoundError:messagebox.showwarning("错误", "桌面文件丢失,正在尝试重建...")init_excel()def delete_selected(self):selected_item = self.tree.selection()if not selected_item:messagebox.showwarning("错误", "请先选择要删除的记录")returnitem_data = self.tree.item(selected_item, "values")confirm = messagebox.askyesno("确认删除",f"确定要永久删除这条记录吗?\n\n时间:{item_data[0]}\n内容:{item_data[1]}")if not confirm:returntry:wb = openpyxl.load_workbook(FILE_PATH)ws = wb.active# 精确匹配删除found = Falsefor row_idx in range(2, ws.max_row + 1):if (ws.cell(row=row_idx, column=1).value == item_data[0] and ws.cell(row=row_idx, column=2).value == item_data[1]):ws.delete_rows(row_idx)found = Truebreakif found:wb.save(FILE_PATH)self.load_records()  # 静默刷新else:messagebox.showwarning("错误", "未找到对应记录,可能已被删除")except PermissionError:messagebox.showerror("错误", "文件被占用,请关闭Excel后重试")except Exception as e:messagebox.showerror("错误", f"删除失败:{str(e)}")if __name__ == "__main__":init_excel()root = tk.Tk()app = RecordApp(root)root.mainloop()

相关文章:

【开发学习】如何使用deepseek创建记录事件时间的PC应用程序

本文记录了尝试使用deepseek创建应用程序的过程&#xff0c;实现记录事件&时间的PC应用程序&#xff0c;包括创建代码、测试及调整。 目的&#xff1a;创建一个应用&#xff0c;用户输入文本提交&#xff0c;应用记录下时间和文本&#xff0c;数据留存在excel和应用程序中。…...

OSPF-单区域的配置

一、单区域概念&#xff1a; 单区域OSPF中&#xff0c;整个网络被视为一个区域&#xff0c;区域ID通常为0&#xff08;骨干区域&#xff09;。所有的路由器都在这个区域内交换链路状态信息。 补充知识点&#xff1a; OSPF为何需要loopback接口&#xff1a; 1.Loopback接口的…...

【2025力扣打卡系列】0-1背包 完全背包

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为python3&#xff0c;Day5 0-1背包【目标和】 有n个物品&#xff0c;第i个物品的体积为w[i], 价值为v[i]。每个物品至多选一个&#xff0c;求体积和不超过capacity时的最大价值和常见变形 至多装capacity&#x…...

分布式锁—Redisson的同步器组件

1.Redisson的分布式锁简单总结 Redisson分布式锁包括&#xff1a;可重入锁、公平锁、联锁、红锁、读写锁。 (1)可重入锁RedissonLock 非公平锁&#xff0c;最基础的分布式锁&#xff0c;最常用的锁。 (2)公平锁RedissonFairLock 各个客户端尝试获取锁时会排队&#xff0c;按照队…...

OpenEuler24.x下ZABBIX6/7实战1:zabbix7.2.4安装及zabbix-agent安装

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1 安装及准备 先决条件&#xff1a;建议使用CentOS8以上的操作系统。 CentOS8.5.2111内核版本为 图1- 1 华为OpenEuler24(以后简称OE24)的内核为 [rootzbxsvr ~]# uname -r 5.10.0-…...

人工智能技术篇*卷(一)

了解人工智能的发展历史&#xff0c;会让我们心中有个大概了解&#xff0c;但这远远不够&#xff0c;我们起码还要知道大概有什么技术&#xff0c;怎么用它处理问题&#xff0c;有需要的话最好深入到算法原理。我们先从整体上看这个技术&#xff0c;接下来将不断细化。 我们知…...

ROS实践一构建Gazebo机器人模型文件urdf

URDF&#xff08;Unified Robot Description Format&#xff09;是一种基于XML的格式&#xff0c;用于描述机器人模型的结构、关节、连杆和传感器信息&#xff0c;并可以与Gazebo、RViz等仿真环境结合使用。 一、基础语法 1. urdf文件组成 URDF 主要由以下几个核心元素&#…...

C++学习——哈希表(一)

文章目录 前言一、哈希表的模板代码二、哈希计数器三、哈希表中的无序映射四、哈希表的总结 前言 本文为《C学习》的第11篇文章&#xff0c;今天学习最后一个数据结构哈希表&#xff08;散列表&#xff09;。 一、哈希表的模板代码 #include<iostream> using namespace…...

DeepSeek R1在医学领域的应用与技术分析(Discuss V1版)

DeepSeek R1作为一款高性能、低成本的国产开源大模型,正在深刻重塑医学软件工程的开发逻辑与应用场景。其技术特性,如混合专家架构(MoE)和参数高效微调(PEFT),与医疗行业的实际需求紧密结合,推动医疗AI从“技术驱动”向“场景驱动”转型。以下从具体业务领域需求出发,…...

Git 如何配置多个远程仓库和免密登录?

自我简介&#xff1a;4年导游&#xff0c;10年程序员&#xff0c;最近6年一直深耕低代码领域&#xff0c;分享低代码和AI领域见解。 通用后台管理系统 代号&#xff1a;虎鲸 缘由 每次开发后台界面都会有很多相同模块&#xff0c;尝试抽离出公共模块作为快速开发的基座。 目标…...

【Linux篇】从冯诺依曼到进程管理:计算机体系与操作系统的核心逻辑

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 文章目录 1.冯诺依曼体系结构存储分级理解数据流动 2. 操作系统(Operator System)2.1 概念2.2 设计OS的…...

【Linux docker】关于docker启动出错的解决方法。

无论遇到什么docker启动不了的问题 就是 查看docker状态sytemctl status docker查看docker日志sudo journalctl -u docker.service查看docker三个配置文件&#xff1a;/etc/docker/daemon.json&#xff08;如果存在&#xff09; /etc/systemd/system/docker.service&#xff…...

数据结构:有序表的插入

本文是我编写的针对计算机专业考研复习《数据结构》所用资料内容选刊。主要目的在于向复习这门课程的同学说明&#xff0c;此类问题不仅仅使用顺序表&#xff0c;也可以使用链表。并且&#xff0c;在复习中&#xff0c;两种数据结构都要掌握。 若线性表中的数据元素相互之间可以…...

【医院内部控制专题】7.医院内部控制环境要素剖析(三):人力资源政策

医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院内部控制的重要性愈发凸显。内部控制作为医院管理的关键组成部分,对于保障医院资产安全、提高会计信息质量、提升运营效率以及实现战略目标起着至关重要的…...

计算机网络——交换机

一、什么是交换机&#xff1f; 交换机&#xff08;Switch&#xff09;是局域网&#xff08;LAN&#xff09;中的核心设备&#xff0c;负责在 数据链路层&#xff08;OSI第二层&#xff09;高效转发数据帧。它像一位“智能交通警察”&#xff0c;根据设备的 MAC地址 精准引导数…...

CentOS7离线部署安装Dify

离线部署安装Dify 在安装 Dify 之前&#xff0c;请确保您的机器满足以下最低系统要求&#xff1a; CPU > 2 核 内存 > 4 GiB 1.安装docker和docker compose 启动 Dify 服务器最简单的方式是通过docker compose。因此现在服务器上安装好docker和docker compose&#xf…...

力扣hot100_二叉树(4)_python版本

一、199. 二叉树的右视图 思路&#xff1a; 直接复用层序遍历的代码&#xff0c;然后取每层的最后一个节点代码&#xff1a; class Solution:def rightSideView(self, root: Optional[TreeNode]) -> List[int]:层序遍历取每层的第一个if not root: return []res []queue …...

bug-Ant中a-select的placeholder不生效(绑定默认值为undefined)

1.问题 Ant中使用a-select下拉框时&#xff0c;placeholder设置输入框显示默认值提示&#xff0c;vue2ant null与undefined在js中明确的区别&#xff1a; null&#xff1a;一个值被定义&#xff0c;定义为“空值” undefined&#xff1a;根本不存在定义 2.解决 2.1 a-select使…...

Spring 面向切面编程 XML 配置实现

Spring 支持AOP &#xff0c;并且可以通过XML配置来实现。 <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:aop"http://www.springframework.org/schema/aop"xmlns:…...

【Pandas】pandas Series compare

# Pandas2.2 Series ## Computations descriptive stats |方法|描述| |-|:-------| |Series.compare(other[, align_axis, ...])|用于比较两个 Series| ### pandas.Series.compare pandas.Series.compare 方法用于比较两个 Series&#xff0c;并返回一个包含差异的 DataFram…...

颠覆语言认知的革命!神经概率语言模型如何突破人类思维边界?

颠覆语言认知的革命&#xff01;神经概率语言模型如何突破人类思维边界&#xff1f; 一、传统模型的世纪困境&#xff1a;当n-gram遇上"月光族难题" 令人震惊的案例&#xff1a;2012年Google语音识别系统将 用户说&#xff1a;“我要还信用卡” 系统识别&#xff…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.1热点分片识别与均衡策略

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 5.1.1 Filebeat Logstash ES Kibana 全链路配置实1. 架构设计与组件选型1.1 技术栈对比分析1.2 硬件配置推荐 2. Filebeat 高级配置2.1 多输入源配置2.2 性能优化参数 3.…...

练习:关于静态路由,手工汇总,路由黑洞,缺省路由相关

这是题目,我已经画分好了网段,题目要求是这样的: 划分网段 我为什么一个网段划了6个可用IP(一个网段8个地址)呢,因为我刚开始吧环回接口理解成一个主机了,导致我认为两个环回主机在一个网段,其实每个网段只需要2个地址就可以完成这个练习,我懒得划了,就按第一张图的网段来吧…...

J6打卡——pytorch实现ResNeXt-50实现猴痘检测

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 1.检查GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, d…...

vue+dhtmlx-gantt 实现甘特图-快速入门【甘特图】

文章目录 一、前言二、使用说明2.1 引入依赖2.2 引入组件2.3 引入dhtmlx-gantt2.4 甘特图数据配置2.5 初始化配置 三、代码示例3.1 Vue2完整示例3.2 Vue3 完整示例 四、效果图 一、前言 dhtmlxGantt 是一款功能强大的甘特图组件&#xff0c;支持 Vue 3 集成。它提供了丰富的功…...

音视频入门基础:RTP专题(16)——RTP封装音频时,音频的有效载荷结构

一、引言 《RFC 3640》和《RFC 6416》分别定义了两种对MPEG-4流的RTP封包方式&#xff0c;这两个文档都可以从RFC官网下载&#xff1a; RFC Editor 本文主要对《RFC 3640》中的音频打包方式进行简介。《RFC 3640》总共有43页&#xff0c;本文下面所说的“页数”是指在pdf阅读…...

通领科技冲刺北交所

高质量增长奔赴产业新征程 日前&#xff0c;通领科技已正式启动在北交所的 IPO 进程&#xff0c;期望借助资本市场的力量&#xff0c;加速技术升级&#xff0c;推动全球化战略布局。这一举措不仅展现了中国汽车零部件企业的强大实力&#xff0c;也预示着行业转型升级的新突破。…...

超分之DeSRA

Desra: detect and delete the artifacts of gan-based real-world super-resolution models.DeSRA&#xff1a;检测并消除基于GAN的真实世界超分辨率模型中的伪影Xie L, Wang X, Chen X, et al.arXiv preprint arXiv:2307.02457, 2023. 摘要 背景&#xff1a; GAN-SR模型虽然…...

Ubuntu用户安装cpolar内网穿透

前言 Cpolar作为一款体积小巧却功能强大的内网穿透软件&#xff0c;不仅能够在多种环境和应用场景中发挥巨大作用&#xff0c;还能适应多种操作系统&#xff0c;应用最为广泛的Windows、Mac OS系统自不必多说&#xff0c;稍显小众的Linux、树莓派、群辉等也在起支持之列&#…...

小程序事件系统 —— 33 事件传参 - data-*自定义数据

事件传参&#xff1a;在触发事件时&#xff0c;将一些数据作为参数传递给事件处理函数的过程&#xff0c;就是事件传参&#xff1b; 在微信小程序中&#xff0c;我们经常会在组件上添加一些自定义数据&#xff0c;然后在事件处理函数中获取这些自定义数据&#xff0c;从而完成…...