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

您所在的位置:网站首页 药店打印小票怎么驱动 pyinstaller python 使用ecs/pos操作pos小票打印机

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

2024-07-10 12:40| 来源: 网络整理| 查看: 265

# 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即可



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3