You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python GUI实现日期时间自动填充及CSV追加写入需求

CSV记录工具功能增强方案

问题背景

开发生产级轻量GUI工具,用于向CSV文件追加记录,支持输入日期(格式如12/12/2022)、时间和序列号,需新增以下功能:

  • 程序启动时自动填充当前日期和时间
  • 添加按钮实现一键填充当前日期和时间到对应输入框

现有基础代码:

from tkinter import *

def save_info():
    date_info = date.get()
    time_info = time.get()
    
    serialNumber_info = serialNumber.get()
    serialNumber_info = str(serialNumber_info)
    
    print(date_info, time_info, serialNumber_info)

    file = open("test.csv", "a")
    file.write(date_info)
    file.write(",")
    file.write(time_info)
    file.write(",")
    file.write(serialNumber_info)
    file.write("\n")
    file.close()
    print(" User ", date_info, " Has been registered")

    date_entry.delete(0, END)
    time_entry.delete(0, END)
    serialNumber_entry.delete(0, END)

screen = Tk()
screen.geometry("500x500")
screen.title("Python Form")
heading = Label(text = "Python Form", bg = "grey", fg = "black", width = "500", height = "3")
heading.pack()

date_text = Label(text = "Date * ",)
time_text = Label(text = "Time * ",)
serialNumber_text = Label(text = "Serial Number * ",)
date_text.place(x = 15, y = 70)
time_text.place(x = 15, y = 140)
serialNumber_text.place(x = 15, y = 210)

date = StringVar()
time = StringVar()
serialNumber = IntVar()

date_entry = Entry(textvariable = date, width = "30")
time_entry = Entry(textvariable = time, width = "30")
serialNumber_entry = Entry(textvariable = serialNumber, width = "30")

date_entry.place(x = 15, y = 100)
time_entry.place(x = 15, y = 180)
serialNumber_entry.place(x = 15, y = 240)
register = Button(screen,text = "Register", width = "30", height = "2", command = save_info, bg = "grey")
register.place(x = 15, y = 400)

解决方案

修改后的完整代码

from tkinter import *
from datetime import datetime

def get_current_datetime():
    # 格式化日期为DD/MM/YYYY,时间为HH:MM:SS
    current_date = datetime.now().strftime("%d/%m/%Y")
    current_time = datetime.now().strftime("%H:%M:%S")
    return current_date, current_time

def fill_current_datetime():
    # 一键填充当前日期时间到输入框
    date_str, time_str = get_current_datetime()
    date.set(date_str)
    time.set(time_str)

def save_info():
    date_info = date.get()
    time_info = time.get()
    serialNumber_info = str(serialNumber.get())
    
    print(date_info, time_info, serialNumber_info)

    # 使用with语句自动管理文件,避免资源泄漏
    with open("test.csv", "a") as file:
        file.write(f"{date_info},{time_info},{serialNumber_info}\n")
    
    print(f"记录已保存: {date_info} {time_info} {serialNumber_info}")

    # 清空输入框
    date_entry.delete(0, END)
    time_entry.delete(0, END)
    serialNumber_entry.delete(0, END)

screen = Tk()
screen.geometry("500x500")
screen.title("CSV记录工具")
heading = Label(text="CSV记录工具", bg="grey", fg="black", width="500", height="3")
heading.pack()

# 标签布局
date_text = Label(text="日期 * ")
time_text = Label(text="时间 * ")
serialNumber_text = Label(text="序列号 * ")
date_text.place(x=15, y=70)
time_text.place(x=15, y=140)
serialNumber_text.place(x=15, y=210)

# 变量定义
date = StringVar()
time = StringVar()
serialNumber = IntVar()

# 启动时自动填充当前日期时间
init_date, init_time = get_current_datetime()
date.set(init_date)
time.set(init_time)

# 输入框布局
date_entry = Entry(textvariable=date, width="30")
time_entry = Entry(textvariable=time, width="30")
serialNumber_entry = Entry(textvariable=serialNumber, width="30")
date_entry.place(x=15, y=100)
time_entry.place(x=15, y=180)
serialNumber_entry.place(x=15, y=240)

# 一键填充按钮
fill_btn = Button(screen, text="填充当前时间", width="30", height="2", command=fill_current_datetime, bg="lightgrey")
fill_btn.place(x=15, y=300)

# 保存按钮
register = Button(screen, text="保存记录", width="30", height="2", command=save_info, bg="grey")
register.place(x=15, y=400)

screen.mainloop()

核心改进说明

  • 日期时间处理:借助datetime模块获取当前时间,通过strftime()格式化要求的格式,同时实现启动自动填充和手动一键填充
  • 文件操作优化:使用with语句自动关闭文件,避免手动关闭可能引发的资源泄漏,更适合生产环境
  • 界面优化:调整标题和按钮文本,使其更贴合工具用途
  • 代码可维护性:提取日期时间获取逻辑为独立函数,便于后续修改格式或扩展功能

内容的提问来源于stack exchange,提问作者user20758216

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:05:23