







“还在为年会 500 张证书手写名字而抓狂?还在把 Word 当 PS 使?别闹了!今天咱们把 Python 开成外挂:拖一张模板、点两下鼠标、喝杯咖啡的功夫,证书哗啦啦全出炉!接下来请系好安全带,老司机带你拆解这辆‘全自动印钞机’——哦不,证书生成器的每一颗螺丝钉!”
main 启动守卫CertificateGenerator 主类2.1 初始化 & UI 搭建2.2 模板加载与预览2.3 文字定位与字体渲染2.4 批量生成核心引擎2.5 跨平台字体兜底策略if __name__ == "__main__":try:import pandas, openpyxlexcept ImportError: messagebox.showerror("依赖缺失", "请先安装依赖:\npip install pillow pandas openpyxl") exit() root = tk.Tk() app = CertificateGenerator(root) root.mainloop()classCertificateGenerator:def__init__(self, root): self.root = root self.root.title("批量证书生成器(字体修复版)") self.system = platform.system() # Windows? macOS? Linux? ... self.create_ui()__init__ 只做“登记户口”:窗口标题、系统类型、核心变量。create_ui(),把舞台搭好,把灯打亮。left_frame = ttk.Frame(self.root, padding="10")left_frame.pack(side=tk.LEFT, fill=tk.Y)ttk.Label(left_frame, text="1. 选择证书模板").pack(anchor=tk.W, pady=5)ttk.Button(left_frame, text="浏览模板", command=self.load_template).pack(fill=tk.X, pady=3)...pack 的 side 参数像拼乐高一样码好位置。defresize_preview_image(self): canvas_w = self.preview_canvas.winfo_width() - 40 canvas_h = self.preview_canvas.winfo_height() - 40 orig_w, orig_h = self.original_img.size self.scale_ratio = min(canvas_w / orig_w, canvas_h / orig_h, 1.0)original_img → preview_img → tk_img,层层转换,像俄罗斯套娃。defset_text_position(self, event): img_x, img_y = self.image_offsetif (img_x <= event.x <= img_x + img_w and img_y <= event.y <= img_y + img_h): self.text_pos = (event.x - img_x, event.y - img_y)defget_chinese_font(self, size):if self.system == "Windows": fonts = ["SimHei", "Microsoft YaHei", ...]elif self.system == "Darwin": fonts = ["Heiti TC", "PingFang SC", ...] ...for font_name in fonts:try:return ImageFont.truetype(font_name, size)except:continueactual_font_size = int(self.font_size / self.scale_ratio)with Image.open(self.template_path) as img: draw = ImageDraw.Draw(img) draw.text((actual_x, actual_y), name, font=font, anchor="mm") img.save(os.path.join(output_dir, f"{name}_证书.png"))font_size 是“缩小图”上的字号,真正写字时必须除以 scale_ratio,否则字会小得亲妈不认。Toplevel 独立窗口 + ttk.Progressbar,让老板以为你在认真干活。platform.system() | ||
整个项目像一部精密的瑞士军刀:
__init__ 把刀柄握稳;create_ui() 弹出各种刀片;resize_preview_image() 精准刻度尺;set_text_position() 激光瞄准镜;get_chinese_font() 多语言螺丝刀;batch_generate() 一键电动马达。最终目标:让非程序员也能 3 分钟上手,3 秒钟出图,3 小时提前下班!
“至此,‘批量证书工厂’已拆解完毕,赶紧把代码抱回家,给你的鼠标放个假吧!”
点击【关注+收藏】获取最新的实战代码案例
用Python打造汉字笔画查询工具:从GUI界面到笔顺动画实现
Python超实用 Markdown 转富文本神器 —— 代码全解析
【实战1】
【实战2】
【实战3】
【实战4】

