点【关注+收藏】实时获取最新的实战代码案例











点【关注+收藏】实时获取最新的实战代码案例
“写诊断书像写情书,一笔一划都得走心;但手抖写错一行,患者可能就要走‘刑’。”今天,我们就用 3000 字把这段“走心”又“走形”的 Python 代码拆成 7 盘菜,从界面到导出,从横线到印章,一口一口喂给你。吃完保证你能在老板面前 3 分钟改完模板,在护士姐姐面前 30 秒导出 DOC,顺带收获“哇,你好懂”的星星眼👀。
| “它就是医院里的‘美图秀秀’” |
w:pBdr,线粗、间距、段后距一条龙 |
┌------------------ tkinter 根窗口 ------------------┐│ ┌- main_frame(ttk.Frame 填充整个窗口) ││ │ ├- PanedWindow:左右可拖动分栏 │ ← 夹心菜│ │ │ ├- editor_frame(左) 填表 ││ │ │ └- preview_frame(右) 画布实时预览 ││ │ └- button_frame(底) 更新 / 导出按钮 │└--------------------------------------------------┘下面出现的“行号”为便于描述,与真实脚本可能差 ±1~2 行,复制关键词搜一下就能定位。
classLineSetManager:def__init__(self, canvas): self.canvas = canvas self.line_sets = {} # 字典:set_id → DraggableLineSet 实例line_sets |
defcreate_line_set(self, set_id, x, y, length=300, bold_thickness=3, thin_thickness=1): line_set = DraggableLineSet(...) # 真正的“工人” self.line_sets[set_id] = line_setreturn line_setself.line_manager.get_line_set("title_lines") 直接拿属性,不用正则去 Canvas 里“抠”线条。classDraggableLineSet: spacing = 2# 像素级“紧挨”参数,调大 1 像素就肉眼变疏defcreate_lines(self):# 1 条加粗黑线 bold_line = self.canvas.create_line(x, y, x+length, y, width=bold_thickness)# 2 条细线,y 坐标只累加 spacing thin1_line = self.canvas.create_line(x, y+spacing, x+length, y+spacing, width=1) thin2_line = self.canvas.create_line(x, y+spacing*2, ...) self.lines = [bold_line, thin1_line, thin2_line]resize_handle 是红色小方块,单独绑事件。classDraggableImage:def__init__(..., image_path=None):if image_path: self.load_image(image_path)else: self.create_placeholder() # 没图时先画灰底+“LOGO”文字load_image | ImageTk.PhotoImage 塞进 Canvas;自持有引用防止被垃圾回收。 |
update_size | resize((new_w, new_h), Image.LANCZOS)→Canvas 立即替换。 |
offset_x / offset_y → 移动 canvas.coords → 边界裁剪。"seal"。def__init__(self, root): self.title_font = tkfont.Font(family="SimSun", size=16, weight="bold") self.normal_font = tkfont.Font(family="SimSun", size=12) ... self.create_paned_window() # 左右分割 self.create_editor_panel() # 左侧表单 self.create_preview_panel() # 右侧画布 self.create_button_panel() # 底部按钮 self.init_line_sets() # 默认两组横线ttk.Label 直接引用,保证 Word 与预览同字号。paned_window 权重 weight=1 → 用户可拖动分界线,左窄右宽适合老电脑小屏。form_canvas = tk.Canvas(self.editor_frame)scrollbar = ttk.Scrollbar(..., command=form_canvas.yview)scrollable_frame = ttk.Frame(form_canvas)form_canvas.create_window((0,0), window=scrollable_frame, anchor="nw")ttk.Entry 再多也能滚;scrollregion 动态绑 <Configure>。StringVar 统一 trace_add("write", lambda *args: self.update_preview()) → 敲一个字,右边画布抖一下,爽感+1。defupdate_preview(self):for widget in self.preview_content.winfo_children(): widget.destroy() # 先清空 paper_frame = ttk.Frame(self.preview_content, width=450, height=650) ... ttk.Label(paper_frame, text=self.hospital_var.get(), font=self.title_font).pack()Canvas 文字,而是把 ttk.Label 塞进 Frame,再让 Frame 被 Canvas 窗口化;这样既能滚动,又能复用 ttk 样式。tag_raise 保证不会被 Label 盖住。defadd_horizontal_line(self, paragraph, thickness=1, spacing=0): p = paragraph._p pPr = p.get_or_add_pPr() pBdr = OxmlElement('w:pBdr') bottom = OxmlElement('w:bottom') bottom.set(qn('w:val'), 'single') bottom.set(qn('w:sz'), str(thickness * 8)) # 1 pt = 8 半磅 bottom.set(qn('w:space'), str(spacing)) pBdr.append(bottom) pPr.append(pBdr)thickness*8 是官方换算表。spacing=0 → 紧挨;w:after=10 让段后距再收一点,完美复刻 Canvas 效果。doc.add_picture(),宽度 Inches(self.seal.width/72) 直接拿像素 ÷ 72 转英寸,打印 1:1。tag_bind + <B1-Motion> + canvas.move | ||
Image.LANCZOS + ImageTk.PhotoImage | ||
StringVar.trace_add | ||
OxmlElement('w:pBdr') | ||
canvas.configure(scrollregion=canvas.bbox('all')) | ||
weight=1 |
DraggableQR。cryptography 做 PDF 数字签,再把导出格式换成 reportlab。 | |
name_var.set() → 自动命名 f"{name}.docx"。 | |
remi 或 pywebio,浏览器里拖印章,服务器导出 DOC 返回下载。 |
“诊断证明书”五个字听起来严肃,但代码可以很温柔:它让护士少点加班,让患者少点排队,让程序员多点头发。把这段脚本往医院电脑上一扔,你收获的不仅是“谢谢”,还有护士长偷偷塞给你的——两个橘子🍊。
——全文 3000+ 字,祝你编译不报错,导出不跑版,横线永远对齐!
点击【关注+收藏】获取最新的实战代码案例
Python实现诊断证明书编辑器——从 0 到 1 的“土味”GUI 之旅
Python-Ai基于火山方舟&豆包API的全屏实时聊天应用
用Python打造汉字笔画查询工具:从GUI界面到笔顺动画实现
Python超实用 Markdown 转富文本神器 —— 代码全解析
【实战1】
【实战2】
【实战3】
【实战4】

