You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python/Tkinter开发条码打印工具如何实现停止打印功能

条码打印软件停止打印功能修复方案

问题根因

  • 停止逻辑错误:原代码定义了控制变量check_print但从未使用,stop_printing函数仅返回参数没有修改控制变量,循环中断判断写的是if(stop_printing==False),是将函数对象与布尔值比较,该判断永远不成立。
  • 单线程阻塞:Tkinter是单线程运行的,打印函数运行时会阻塞主事件循环,点击终止按钮的事件无法被处理,控制变量永远不会被更新。
  • 未清理打印队列:仅中断本地生成循环无法停止已经提交到打印机队列的任务,已提交的任务会继续打印完成。

修复步骤

  1. 修正启停控制逻辑:终止按钮点击时修改全局控制变量check_print为False,打印循环中判断该变量决定是否中断。
  2. 避免界面阻塞:打印循环每次迭代调用root.update()刷新事件队列,响应终止按钮点击操作。
  3. 新增打印队列清理逻辑:触发停止时调用Windows打印API清空当前打印机的待打印任务。
  4. 每次启动打印前重置控制变量为True,避免上次停止后无法再次启动打印。

核心修改代码

1. 停止函数修改

check_print = True
def stop_printing():
    global check_print
    check_print = False
    # 清空当前打印机队列
    printer_name = win32print.GetDefaultPrinter()
    hprinter = win32print.OpenPrinter(printer_name)
    try:
        win32print.SetPrinter(hprinter, 0, None, win32print.PRINTER_CONTROL_PURGE)
    finally:
        win32print.ClosePrinter(hprinter)

2. 打印函数修改

在barcode_printer函数开头先重置控制变量,循环内新增事件刷新和停止判断:

def barcode_printer():
    global check_print
    check_print = True
    if ((var3.get()=="Codice con numero")):
        iteration=entry6.get()
        startNumber=entry5.get() 
        for i in range(int(iteration)):
            # 原有生成条码、打印的逻辑不变
            # ---------------------------
            # 原有逻辑结束后新增以下内容
            root.update() # 刷新界面事件响应
            if not check_print:
                break
    elif (var3.get()=="Codice senza numero"):
        iteration=entry6.get()
        startNumber=entry5.get()
        for i in range(int(iteration)):
            # 原有生成条码、打印的逻辑不变
            # ---------------------------
            # 原有逻辑结束后新增以下内容
            root.update() # 刷新界面事件响应
            if not check_print:
                break

3. 终止按钮绑定修改

button2 = Button(root, text="Termina",height=2, width=6,command=stop_printing, font=("TkDefaultFont",18),bg='white')

优化建议

  • 打印完成后自动删除生成的临时条码图片,避免占用磁盘空间
  • 可增加打印进度提示,提升使用体验
  • 输入参数增加合法性校验,避免输入非数字内容导致程序崩溃

内容的提问来源于stack exchange,提问作者Gebi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:54:05