目录

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

【开发学习】如何使用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 openpyxl

def 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.active
        ws.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 False
    return True

def submit_text():
    input_text = entry.get().strip()
    if not input_text:
        messagebox.showwarning("警告", "请输入内容!")
        return
    
    timestamp = 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 entry
    entry = 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_listbox
    history_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.active
            for 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 openpyxl
    except ImportError:
        print("请先安装依赖库:pip install openpyxl")
        exit(1)
    
    create_gui()

3. 对代码进行打包

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

  1.  环境变量检查,及必要库安装

按 ​ 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”。

https://i-blog.csdnimg.cn/direct/ac0c2d4457da429aa4b16de19d3823f9.png

情况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.active
            ws.append(["时间戳", "记录内容"])
            wb.save(FILE_PATH)
            print(f"已创建新文件于桌面:{FILE_PATH}")  # 调试信息
        except PermissionError:
            messagebox.showerror("错误", "无法在桌面创建文件,请检查写权限")

class RecordApp:
    def __init__(self, root):
        self.root = root
        self.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("输入错误", "记录内容不能为空")
            return
        
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        
        try:
            wb = openpyxl.load_workbook(FILE_PATH)
            ws = wb.active
            ws.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.active
            
            records = []
            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("错误", "请先选择要删除的记录")
            return
        
        item_data = self.tree.item(selected_item, "values")
        confirm = messagebox.askyesno(
            "确认删除",
            f"确定要永久删除这条记录吗?\n\n时间:{item_data[0]}\n内容:{item_data[1]}"
        )
        
        if not confirm:
            return
        
        try:
            wb = openpyxl.load_workbook(FILE_PATH)
            ws = wb.active
            
            # 精确匹配删除
            found = False
            for 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 = True
                    break
                    
            if 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()