在保存照片时,自动给文件名加上时间戳,这样可以避免文件名重复,也能清晰记录拍摄时间,这个需求非常实用
实现思路
- 使用 Python 内置的
datetime 模块生成格式化的时间戳 - 修改
save_photo() 方法,在弹出保存对话框时,将时间戳作为默认文件名 - 时间戳格式建议使用
年-月-日_时-分-秒,既易读又不会包含系统不支持的特殊字符
修改后的完整代码(关键部分)
只需修改原代码中的 save_photo 方法,并添加 datetime 导入即可:
import tkinter as tkfrom tkinter import ttk, filedialog, messageboximport cv2import threadingimport timefrom PIL import Image, ImageTkimport os# 新增:导入datetime模块from datetime import datetimeclassCameraApp:# 其他代码保持不变...defsave_photo(self):"""保存捕获的照片(添加时间戳)"""ifnot hasattr(self, 'captured_photo'): messagebox.showwarning("警告", "没有可保存的照片!")return# 生成时间戳,格式:年-月-日_时-分-秒 timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")# 设置默认文件名,包含时间戳 default_filename = f"摄像头照片_{timestamp}"# 弹出保存对话框,设置默认文件名 file_path = filedialog.asksaveasfilename( defaultextension=".jpg", initialfile=default_filename, # 新增:设置默认文件名 filetypes=[("JPEG图片", "*.jpg"), ("PNG图片", "*.png"), ("所有文件", "*.*")], title="保存照片" )if file_path:# 转换颜色空间并保存 img = cv2.cvtColor(self.captured_photo, cv2.COLOR_RGB2BGR) cv2.imwrite(file_path, img) self.status_var.set(f"照片已保存至: {file_path}") messagebox.showinfo("成功", f"照片已保存到:\n{file_path}") self.save_btn.config(state=tk.DISABLED)# 其他代码保持不变...if __name__ == "__main__": root = tk.Tk() app = CameraApp(root) root.mainloop()
关键修改点解释
- 导入模块:在代码开头添加
from datetime import datetime,用于生成时间戳。 strftime("%Y-%m-%d_%H-%M-%S") 将时间格式化为字符串,各部分含义:- 最终生成的时间戳示例:
2026-02-27_15-30-45
- 设置默认文件名:在
asksaveasfilename 中添加 initialfile=default_filename,这样保存对话框会自动填充包含时间戳的文件名,用户可直接保存或修改。
扩展:自定义时间戳格式
如果你想调整时间戳格式,可以修改 strftime 的参数,例如:
- 12小时制(带上午/下午):
%Y-%m-%d_%I-%M-%S_%p → 2026-02-27_03-30-45_PM - 简化格式:
%Y%m%d_%H%M%S → 20260227_153045
总结
- 核心修改是导入
datetime 模块,生成格式化时间戳,并设置为保存对话框的默认文件名。 - 时间戳格式采用
年-月-日_时-分-秒,既符合命名规范,又能清晰区分不同照片。 - 修改后的代码保留了原有的所有功能,仅增强了文件名的自动命名逻辑,用户仍可手动修改文件名。
你只需将原代码中的 save_photo 方法替换为上述版本,并添加 datetime 导入,即可实现带时间戳的照片保存功能。