pyqt5 listview 不默认选中_pyqt5 商店小票打印的实现模板
说明
最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机。
商店小票打印,属于escpos打印。
在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实现了。
这里先分享一下我看过的文章和尝试过的方法,最后分享我的实现套路。
一.使用execl打印
很多场景,我都是使用win32com模块的execl打印,基本能解决大部分的打印问题。(相关的方法网上也有,可以找找,如有需要,我有时间单独写一篇)
但使用execl打印热敏小票却不行,会打出整页空白,此路不通,只能放弃。
二. 使用QTextDocument打印
pyqt5自带一套打印工具,也颇为好用。
商店小票,一般思路就是使用QTextDocument,对其setHtml,便能利用html进行排版打印。
这种方法网上很多,但是依然有问题,就是QTextDocument会强制左边和顶部留白。
这里我主要参考了PyQt5中使用Qprinter打印热敏小票一文,大家可以进去看看,非常好的文章。
三 使用ESCPOS打印
热敏小票打印机,都是遵循escpos指令进行打印的,所以我便去找python的escpos模块,还真有。
一个叫python-escpos,使用命令pip install python-escpos
即可安装。
一个叫python-printer-escpos, 使用命令pip install python-printer-escpos
即可安装。
这两个模块,都需要先连接打印机。但我搞了半天,也没有连上,只能放弃。
相关文章,网上也有,自行搜索吧。
四. HTML文件转图片,进行打印
回到PyQt5中使用Qprinter打印热敏小票一文,推荐了html转图片打印的方法,最终作者就是用这种方法实现的。
这种方法,也算解决了QTextDocument强制留白的问题。
我也尝试了一下,但html转图片太过麻烦,而且打印效果不清晰,选择放弃。
五. 使用QWebEngineView进行打印
基于PyQt5中使用Qprinter打印热敏小票一文,继续研究,继续摸索,终于找了我的实现方法,直接使用QWebEngineView进行打印,简单方便。
但有一点缺陷,就是打印效果依旧有点不清晰,后面就通过字体加粗加大来对冲解决。
【如下代码,完全复制,直接运行,即可使用】
1import win32print 2from PyQt5.QtWidgets import QApplication, QDialog 3from PyQt5.QtCore import QObject, pyqtSlot, QUrl, QSizeF, QMarginsF, QTimer 4from PyQt5.QtWebEngineWidgets import QWebEngineView 5from PyQt5.QtPrintSupport import QPrinter 6import sys 7 8 9################################################ 10the_html=''' 11 12html> 13 14 15 16 使用PyQt5打印热敏小票 17 18 * {padding:0;margin: 0;font-weight:bold;face="KaiTi"} 20 h1 {font-size: 1em} 21 h3 {text-align: center;font-size: 2em} 22 .left {float: left;} 23 .right {float:right;} 24 .clearfix {clear: both;} 25 .print_container {width: 180px;} 26 .section2 label {font-size: 1em;display: block} 27 .section3 label {font-size: 1em;display: block} 28 .section4 .total label {font-size: 1em;display: block} 29 .section4 {text-align: center;font-size: 1em;border-bottom: 1em solid #DADADA} 30 .section5 label {text-align: center;font-size: 1em;display: block} 31 32 33
34
35
一心狮便利店
36 *************************************** 37
38 订单号:700001001201811161631123558 39 下单时间:2018-10-16 16:31:14 40 收银员:王小明 41
42 *************************************** 43
44
45
46 47 48 商品名 49 单价 50 数量 51 52 53 54 55 56 今麦郎1 57 100 58 10000.00 59 60 61 今麦郎2 62 1 63 100.00 64 65 66 今麦郎3 67 1 68 100.00 69 70 71 72
73
74 合 计 75 100.00 76 77 收款金额 78 100 79 80 找零金额 81 0.00 82 83
84
85 顾客已付款 86
87 *************************************** 88
89
90 电话: 91
92 *************************************** 93
94 欢迎光临,谢谢惠顾! 95 一心狮便利店 96 97
98
99 100 101 102 103 微信扫码 购好物 享服务104
105106
107108
109110111112'''
113
114################################################
115# 打印回调函数
116def print_completed(result):
117 pass
118
119# 开始打印小票
120def goto_print_litbill():
121 webview.page().print(printer, print_completed)
122
123
124################################################
125#######程序入口
126################################################
127if __name__ == '__main__':
128 app = QApplication(sys.argv)
129 webview = QWebEngineView()
130 webview.setHtml(the_html)
131 #webview.show()
132 win32print.SetDefaultPrinter("DL-581PW(NEW)") #设置为默认打印机
133 printer = QPrinter()
134 printer.setPageSizeMM(QSizeF(80, 300))
135 ##########必须延迟打印,否则网页还没加载,打印空白#########
136 timer = QTimer()
137 timer.timeout.connect(goto_print_litbill)
138 timer.setSingleShot(True)
139 timer.start(500)
140 ###################################################
141 sys.exit(app.exec_())
本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。
写在最后1
我自己现在用的就是【五. 使用QWebEngineView】进行打印,但不代表其他方法完全不可行,大家根据自己情况自己摸索下。
当然,这种方法依旧存在打印不清晰的缺陷,如果哪位大神有更好的方法,敬请留言推荐,谢谢了。
写在最后2
最后,郑重感谢PyQt5中使用Qprinter打印热敏小票的作者yuchanns。
有了他这篇文章,节省了我好多时间。本文本想收费的,嘿嘿,为感谢yuchanns,就免费分享了,希望也能节省你的时间。如果本文对你有帮助,也请去感谢他吧。
pyqt5 listview 不默认选中_pyqt5 商店小票打印的实现模板相关推荐
- python打印小票_pyqt5 商店小票打印的实现模板
说明 最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机. 商店小票打印,属于escpos打印. 在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实 ...
- pyqt5 商店小票打印的实现模板
说明 最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机. 商店小票打印,属于escpos打印. 在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实 ...
- Android打印机--小票打印格式及模板设置
小票打印就是向打印设备发送控制打印格式的指令集,而这些打印格式需要去查询对应打印机的API文档,这里我把常用的api给封装了一下 文字对齐方式 打印字体大小 字体是否加粗 打印二维码 打印条形码 切纸 ...
- vue单选框选中_使用vue如何默认选中单选框
使用了vue以后,发现这真的是一个灵活高效的框架,能够轻松实现页面的实时刷新. 那么,今天先聊聊单选框的使用.一般我们使用单选框,会这么写: //HTML one two three 有"c ...
- struts2 select 默认选中
jsp: <s:select list="#{'1':'男','2':'女'}" name="sex"/> action: private Stri ...
- antd 中 Tree 的使用-默认选中问题
在使用antd的Tree 控件的控件的时候,数据回显的时候发现所有的都选中了,很奇怪 <Tree checkable ={true}showLine = {true}multiple={true ...
- vue checkbox 默认选中
<div class="form-group" id="rolelist"><div class="col-xs-12"& ...
- C# winform combobox默认选中项方法
https://blog.csdn.net/easyboot/article/details/68062196 可以使用 Combobox.SelectText = "默认选中文本" ...
- XtraGrid GridView设置默认选中的行颜色
表格加载数据后,默认选中第一行,设置背景颜色:Appearance.HideSelectionRow 设置点击时的颜色:Appearance.FocusedRow 恢复外观属性的默认值:Appeara ...
最新文章
- 彻底理解 Spring 容器和应用上下文
- 爬虫只能用python吗_只针对 Python 爬虫,该如何学习?
- ios 在UIView上画图,线条
- [Leetcode]141. Linked List Cycle
- Android Notification通知详解
- mysql duplicate id_mysql 使用ON DUPLICATE KEY UPDATE 时导致的自增主键id无限增大问题
- 网易编程题------操作序列
- 重磅:向996开炮!携程带头居家办公。
- matlab compass函数,Matlab基本函数-compass函数 | 学步园
- 关于属性值书写无效问题
- Java全套视频教程
- 幻灯片更换模板_如何创建Google幻灯片模板
- 自定义NDK交叉编译链(toolchain)
- 计算机网络基础知识点快速复习手册
- mapbox加载天地图
- 什么是AJAX?如何实现AJAX异步请求?
- CVPR 2023 | 一键去除视频闪烁,该研究提出了一个通用框架
- 跨平台C++ Qt数据库管理系统设计与实战:从理论到实践的全面解析
- VB6 运行时错误‘374’ 激活控件‘VB.UserControl’失败
- c++小项目练习之复数计算器
热门文章
- html一个div浮动在另一div上,css – 在另一个DIV的顶部浮动DIV
- 构建空列表的两种法是_Python 基础3之列表
- python基础教程:函数作用域
- Python中_,__,__xx__的区别
- Python--unique()与nunique()函数
- mysql数据控制语言_mysql数据控制语言DCL(Data Control Language)-数据库
- xftp连接海康摄像头报错:sftp子系统申请已拒绝 请确保ssh连接的sftp子系统设置有效
- hover如何改变子元素或其他同级元素?(用不了怎么回事?)
- pycharm 报黄(黄字、黄色)警告 Local variable 'xxx' might be referenced before assignment
- 【中级软考】专利权的保护期限可以延长吗?商标使用权呢?