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
相关产品推荐
相关产品推荐

