pyinstaller python 使用ecs/pos操作pos小票打印机 |
您所在的位置:网站首页 › 药店打印小票怎么驱动 › 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驱动打印可以比的,毕竟是使用内置字库,算是硬件打印吧。 一:安装ecspospython-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 |