下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:8891
这个购买记录截图生成器项目包含三个主要文件:主程序、模板数据文件和依赖文件。主程序使用Python的tkinter创建GUI界面,Pillow库处理图片生成。用户可以选择背景图片、设置各种购买记录参数,或使用随机生成功能。
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from PIL import Image, ImageDraw, ImageFont
import random
import datetime
import json
import os
class PurchaseRecordGenerator:
def init(self, root):
self.root = root
self.root.title("购买记录截图生成器 v1.0")
self.root.geometry("800x600")
# 初始化变量
self.background_image = None
self.output_path = os.path.expanduser("~/Desktop")
self.font_path = "simhei.ttf"
self.template_data = {
"platforms": ["淘宝", "京东", "拼多多", "天猫", "亚马逊"],
"products": ["手机", "笔记本电脑", "耳机", "智能手表", "平板电脑"],
"brands": ["Apple", "华为", "小米", "三星", "OPPO"],
"prices": [999, 1299, 1999, 2599, 3299, 4599, 5999]
}
self.create_widgets()
self.load_template()
def create_widgets(self):
# 主框架
main_frame = ttk.Frame(self.root, padding="10")
main_frame.pack(fill=tk.BOTH, expand=True)
# 左侧控制面板
control_panel = ttk.LabelFrame(main_frame, text="生成设置", padding="10")
control_panel.pack(side=tk.LEFT, fill=tk.Y, padx=5)
# 平台选择
ttk.Label(control_panel, text="电商平台:").grid(row=0, column=0, sticky=tk.W)
self.platform_var = tk.StringVar()
self.platform_combobox = ttk.Combobox(control_panel, textvariable=self.platform_var)
self.platform_combobox['values'] = self.template_data["platforms"]
self.platform_combobox.grid(row=0, column=1, pady=5, sticky=tk.EW)
# 商品信息
ttk.Label(control_panel, text="商品名称:").grid(row=1, column=0, sticky=tk.W)
self.product_var = tk.StringVar()
self.product_entry = ttk.Entry(control_panel, textvariable=self.product_var)
self.product_entry.grid(row=1, column=1, pady=5, sticky=tk.EW)
# 品牌选择
ttk.Label(control_panel, text="商品品牌:").grid(row=2, column=0, sticky=tk.W)
self.brand_var = tk.StringVar()
self.brand_combobox = ttk.Combobox(control_panel, textvariable=self.brand_var)
self.brand_combobox['values'] = self.template_data["brands"]
self.brand_combobox.grid(row=2, column=1, pady=5, sticky=tk.EW)
# 价格设置
ttk.Label(control_panel, text="商品价格:").grid(row=3, column=0, sticky=tk.W)
self.price_var = tk.StringVar()
self.price_combobox = ttk.Combobox(control_panel, textvariable=self.price_var)
self.price_combobox['values'] = self.template_data["prices"]
self.price_combobox.grid(row=3, column=1, pady=5, sticky=tk.EW)
# 订单号生成
ttk.Label(control_panel, text="订单编号:").grid(row=4, column=0, sticky=tk.W)
self.order_var = tk.StringVar()
self.order_entry = ttk.Entry(control_panel, textvariable=self.order_var)
self.order_entry.grid(row=4, column=1, pady=5, sticky=tk.EW)
# 日期设置
ttk.Label(control_panel, text="购买日期:").grid(row=5, column=0, sticky=tk.W)
self.date_var = tk.StringVar(value=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
self.date_entry = ttk.Entry(control_panel, textvariable=self.date_var)
self.date_entry.grid(row=5, column=1, pady=5, sticky=tk.EW)
# 背景图片选择
ttk.Label(control_panel, text="背景图片:").grid(row=6, column=0, sticky=tk.W)
self.bg_button = ttk.Button(control_panel, text="选择图片", command=self.select_background)
self.bg_button.grid(row=6, column=1, pady=5, sticky=tk.EW)
# 输出路径选择
ttk.Label(control_panel, text="输出路径:").grid(row=7, column=0, sticky=tk.W)
self.path_button = ttk.Button(control_panel, text="选择路径", command=self.select_output_path)
self.path_button.grid(row=7, column=1, pady=5, sticky=tk.EW)
# 生成按钮
self.generate_button = ttk.Button(control_panel, text="生成截图", command=self.generate_image)
self.generate_button.grid(row=8, column=0, columnspan=2, pady=10, sticky=tk.EW)
# 随机生成按钮
self.random_button = ttk.Button(control_panel, text="随机生成", command=self.random_generate)
self.random_button.grid(row=9, column=0, columnspan=2, pady=5, sticky=tk.EW)
# 右侧预览区域
preview_panel = ttk.LabelFrame(main_frame, text="预览", padding="10")
preview_panel.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=5)
self.preview_label = ttk.Label(preview_panel, text="预览区域")
self.preview_label.pack(fill=tk.BOTH, expand=True)
def load_template(self):
try:
with open("template.json", "r", encoding="utf-8") as f:
self.template_data = json.load(f)
self.platform_combobox['values'] = self.template_data["platforms"]
self.brand_combobox['values'] = self.template_data["brands"]
self.price_combobox['values'] = self.template_data["prices"]
except:
pass
def select_background(self):
file_path = filedialog.askopenfilename(
title="选择背景图片",
filetypes=[("图片文件", "*.jpg *.jpeg *.png")]
)
if file_path:
try:
self.background_image = Image.open(file_path)
self.update_preview()
except Exception as e:
messagebox.showerror("错误", f"无法加载图片: {str(e)}")
def select_output_path(self):
path = filedialog.askdirectory(title="选择输出文件夹")
if path:
self.output_path = path
def random_generate(self):
self.platform_var.set(random.choice(self.template_data["platforms"]))
self.brand_var.set(random.choice(self.template_data["brands"]))
product = random.choice(self.template_data["products"])
self.product_var.set(f"{self.brand_var.get()} {product}")
self.price_var.set(str(random.choice(self.template_data["prices"])))
# 生成随机订单号
order_num = "".join([str(random.randint(0, 9)) for _ in range(18)])
self.order_var.set(order_num)
# 随机日期 (最近30天内)
random_days = random.randint(0, 30)
random_date = datetime.datetime.now() - datetime.timedelta(days=random_days)
self.date_var.set(random_date.strftime("%Y-%m-%d %H:%M:%S"))
self.update_preview()
def update_preview(self):
if self.background_image:
preview_img = self.background_image.copy()
preview_img.thumbnail((400, 400))
self.preview_img = ImageTk.PhotoImage(preview_img)
self.preview_label.config(image=self.preview_img)
def generate_image(self):
if not self.background_image:
messagebox.showwarning("警告", "请先选择背景图片")
return
try:
# 创建图片副本
img = self.background_image.copy()
draw = ImageDraw.Draw(img)
# 设置字体
try:
font_large = ImageFont.truetype(self.font_path, 24)
font_medium = ImageFont.truetype(self.font_path, 18)
font_small = ImageFont.truetype(self.font_path, 14)
except:
font_large = ImageFont.load_default()
font_medium = ImageFont.load_default()
font_small = ImageFont.load_default()
# 绘制平台名称
platform = self.platform_var.get() or "淘宝"
draw.text((50, 50), f"平台: {platform}", fill="black", font=font_large)
# 绘制订单信息
order_num = self.order_var.get() or "".join([str(random.randint(0, 9)) for _ in range(18)])
draw.text((50, 100), f"订单编号: {order_num}", fill="black", font=font_medium)
# 绘制日期
date = self.date_var.get() or datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
draw.text((50, 150), f"下单时间: {date}", fill="black", font=font_medium)
# 绘制商品信息
product = self.product_var.get() or "商品"
brand = self.brand_var.get() or "品牌"
price = self.price_var.get() or "0"
draw.text((50, 220), "商品信息:", fill="black", font=font_large)
draw.text((70, 260), f"品牌: {brand}", fill="black", font=font_medium)
draw.text((70, 300), f"名称: {product}", fill="black", font=font_medium)
draw.text((70, 340), f"价格: ¥{price}", fill="red", font=font_large)
# 保存图片
output_file = os.path.join(self.output_path, f"purchase_record_{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}.png")
img.save(output_file)
messagebox.showinfo("成功", f"购买记录截图已保存到:\n{output_file}")
except Exception as e:
messagebox.showerror("错误", f"生成图片时出错: {str(e)}")
if name == "main":
root = tk.Tk()
app = PurchaseRecordGenerator(root)
root.mainloop()
"platforms": ["淘宝", "京东", "拼多多", "天猫", "亚马逊", "苏宁易购", "唯品会", "当当网"],
"products": [
"智能手机", "笔记本电脑", "无线耳机", "智能手表",
"平板电脑", "电视机", "游戏机", "数码相机",
"蓝牙音箱", "电动牙刷", "空气净化器", "扫地机器人"
],
"brands": [
"Apple", "华为", "小米", "三星",
"OPPO", "vivo", "荣耀", "联想",
"戴尔", "惠普", "索尼", "飞利浦"
],
"prices": [
99, 199, 299, 399, 499, 599, 699, 799, 899, 999,
1299, 1599, 1999, 2399, 2799, 3299, 3799, 4299, 4799, 5299,
5999, 6999, 7999, 8999, 9999, 10999, 11999, 12999
]
}