pyinstaller python 使用ecs/pos操作pos小票打印机

# pyinstaller --onefile --noconsole --add-data "logo.bmp:." --add-data "D:\PythonTest\ecs_pos_print\.venv\Lib\site-packages\escpos\capabilities.json:\escpos" Main_Windows.py

简介:#

python也可以操作pos小票打印机,使用串口命令来打印,打印速度和打印质量不是windows驱动打印可以比的,毕竟是使用内置字库,算是硬件打印吧。

一:安装ecspos#

python-escpos/python-escpos: Python library to manipulate ESC/POS printers (github.com)

pip install python-escpos==v3.0a9

目前最新版本是v3.0a9,是测试版本,需要指定版本号才能安装。

二:安装usb驱动#

Zadig - USB driver installation made easy (akeo.ie)

反正就是驱动不对,esc/pos就连不上打印机,我安装libusbk才可以正常使用python-ecspos。

尽管安装libusb-win32,也可以查看到USB打印机,但是无法操作,可能是pypthon-ecspos内部实现的不同。跟着用libusbk就好了。

在设备管理器找到你的USB打印支持,硬件ID,看一下PID,VID,打开zadig,options--list all devices,下拉选择pic,vid一致的设备,然后右边选择libusbk,reinstall driver即可。

 

 

三:简单的代码#

from escpos.printer import Usb

""" Seiko Epson Corp. Receipt Printer (EPSON TM-T88III) """
p = Usb(0x067B, 0x2305, 0, profile="TM-T88III")  #这里改VID,PID
p.text("Hello World\n")
p.image("logo.gif")
p.barcode('4006381333931', 'EAN13', 64, 2, '', '')
p.cut()

注意改VID,PID.

四:pyinstaller打包#

直接打包后提示我

escpos\capabilities.json 找不到

所以增加静态文件

# pyinstaller --onefile --noconsole --add-data "logo.bmp:." --add-data "D:\PythonTest\ecs_pos_print\.venv\Lib\site-packages\escpos\capabilities.json:.\escpos" Main_Windows.py

这个logo是需要打印的,所以也打包进去,这个json就是提示找不到的文件。

--add-data  原文件路径:目标路径。

logo.bmp,我直接打包进根目录(.)

json则是打包到(.\escpos)目录。

打包完成后可以正常打开exe文件了。

 五:动态使用打印机#

当我使用pyqt,加上GUI界面后,发现无法使用GUI界面读取的

0x067B, 0x2305

这个参数进行连接,如果写死连接参数,再去打印

p = Usb(idVendor=0x067B, idProduct=0x2305, profile="POS-5890")
print(p.idVendor,p.idProduct)

1659 8965

16进制变成了10进制,而读入的是str。

尝试进行16进制到10进制转换后传入参数(int(id,16),可以打印,代码如下:

复制代码
# 初始化打印机
vid = self.lineEdit_VID.text()
pid = self.lineEdit_PID.text()
# print(vid,pid)
vid=int(vid,16)
pid=int(pid,16)
# print(vid,pid)
# self.print = Usb(idVendor=0x067B, idProduct=0x2305, profile="POS-5890")
self.print = Usb(idVendor=vid, idProduct=pid, profile="POS-5890")
复制代码

 六:usb.core.NoBackendError: No backend availabl#

临时打包一个带控制台窗口的。

pyinstaller 
  --onefile   #单文件
  #--noconsole #没有控制台窗口
  --add-data "D:\PythonTest\ecs_pos_print\daqiao_logo.bmp:."  #增加静态文件 
  --add-data "D:\PythonTest\ecs_pos_print\.venv\Lib\site-packages\escpos\capabilities.json:.\escpos"  #增加escpos需要的文件
  Main_Windows.py  #py原文件

 

复制代码
D:\PythonTest\ecs_pos_print\dist>Main_Windows.exe
Main_Windows.py:16: DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead
3
Traceback (most recent call last):
  File "Main_Windows.py", line 119, in buttonClicked
  File "escpos\printer.py", line 83, in __init__
  File "escpos\printer.py", line 90, in open
  File "usb\core.py", line 1309, in find
usb.core.NoBackendError: No backend available
复制代码

几经查询,发现是没有找到libusb0.dll,一般路径在   C:\Windows\System32\libusb0.dll

甭搞复杂的,直接打包进去好了。

pyinstaller 
  --onefile #单文件
  --noconsole #没有控制台窗口
  --add-data "D:\PythonTest\ecs_pos_print\daqiao_logo.bmp:." #增加静态文件
  --add-data "D:\PythonTest\ecs_pos_print\.venv\Lib\site-packages\escpos\capabilities.json:.\escpos" #增加escpos需要的文件
  --add-binary "C:\Windows\System32\libusb0.dll:." #增加libusb0.dll
  Main_Windows.py #py原文件

七:静态文件打包后无法引用#

似乎又遇到了静态文件找不到的情况。

在py源文件顶部增加

if getattr(sys, 'frozen', None):
    basedir = sys._MEIPASS
else:
    basedir = os.path.dirname(__file__)
logo_bmp=os.path.join(basedir, 'logo.bmp')

后面需要引用静态文件的时候,就直接引用logo_bmp即可

作者:上官飞鸿

出处:https://www.cnblogs.com/jackadam/p/17777686.html

版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。

posted @   上官飞鸿  阅读(1498)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2019-10-20 定制flask-admin的主页
2018-10-20 flask-session 在redis中存储session
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示