Pyqt+QRcode 生成 识别 二维码
1.生成二维码
python生成二维码是件很简单的事,使用第三方库Python QRCode就可生成二维码,我用Pyqt给QRcode打个壳
一.python-qrcode介绍
python-qrcode是个用来生成二维码图片的第三方模块,依赖于 PIL 模块和 qrcode 库。
PIL下载地址:
https://pypi.python.org/pypi/PIL/1.1.6 或
http://www.pythonware.com/products/pil/
qrcode下载地址:
https://pypi.python.org/pypi/qrcode
安装:
python setup.py install
简单用法
import qrcode
img = qrcode.make('hello, qrcode')
img.save('test.png')
高级用法
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data('hello, qrcode')
qr.make(fit=True)
img = qr.make_image()
img.save('test.png')
参数说明:
|
version:值为1~40的整数,控制二维码的大小(最小值是1,是个12×12的矩阵)。 如果想让程序自动确定,将值设置为 None 并使用 fit 参数即可。 error_correction:控制二维码的错误纠正功能。可取值下列4个常量。 box_size:控制二维码中每个小格子包含的像素数。 border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4,是相关标准规定的最小值) |
二. 打壳
做一个Ui转换为Py文件, import qrcode 后就可以生成二维码了
完整代码如下:
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'Qrcode.ui'
#
# Created: Thu Jan 22 09:32:41 2015
# by: PyQt4 UI code generator 4.10.3
#
# WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig) class Ui_qrcode(object):
def setupUi(self, qrcode):
qrcode.setObjectName(_fromUtf8("qrcode"))
qrcode.setEnabled(True)
qrcode.resize(515, 424)
self.groupBoxshow = QtGui.QGroupBox(qrcode)
self.groupBoxshow.setGeometry(QtCore.QRect(50, 120, 431, 281))
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.groupBoxshow.sizePolicy().hasHeightForWidth())
self.groupBoxshow.setSizePolicy(sizePolicy)
self.groupBoxshow.setMinimumSize(QtCore.QSize(0, 0))
self.groupBoxshow.setAutoFillBackground(True)
self.groupBoxshow.setCheckable(False)
self.groupBoxshow.setObjectName(_fromUtf8("groupBoxshow"))
self.label = QtGui.QLabel(self.groupBoxshow)
self.label.setGeometry(QtCore.QRect(10, 20, 401, 241))
self.label.setText(_fromUtf8(""))
self.label.setObjectName(_fromUtf8("label"))
self.groupBox = QtGui.QGroupBox(qrcode)
self.groupBox.setGeometry(QtCore.QRect(50, 20, 431, 91))
self.groupBox.setObjectName(_fromUtf8("groupBox"))
self.horizontalLayoutWidget = QtGui.QWidget(self.groupBox)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 401, 80))
self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget"))
self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setMargin(0)
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
self.label_url = QtGui.QLabel(self.horizontalLayoutWidget)
self.label_url.setObjectName(_fromUtf8("label_url"))
self.horizontalLayout.addWidget(self.label_url)
self.lineEditInput = QtGui.QLineEdit(self.horizontalLayoutWidget)
self.lineEditInput.setObjectName(_fromUtf8("lineEditInput"))
self.horizontalLayout.addWidget(self.lineEditInput)
self.pushButtonOk = QtGui.QPushButton(self.horizontalLayoutWidget)
self.pushButtonOk.setObjectName(_fromUtf8("pushButtonOk"))
self.horizontalLayout.addWidget(self.pushButtonOk) self.retranslateUi(qrcode)
QtCore.QMetaObject.connectSlotsByName(qrcode) def retranslateUi(self, qrcode):
qrcode.setWindowTitle(_translate("qrcode", "Pyqt Qrcode", None))
self.groupBoxshow.setTitle(_translate("qrcode", "二维码显示", None))
self.groupBox.setTitle(_translate("qrcode", "填写二维码内容", None))
self.label_url.setText(_translate("qrcode", "URL地址:", None))
self.pushButtonOk.setText(_translate("qrcode", "生成二维码", None)) import qrcode
class showQr(QtGui.QWidget):
def __init__(self):
super(showQr, self).__init__()
self.ui_qr = Ui_qrcode()
self.ui_qr.setupUi(self)
# PyQT禁止窗口最大化按钮:
self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)
# PyQT禁止调整窗口大小:
self.setFixedSize(self.width(), self.height()) # 触发信号槽
QtGui.QWidget.connect(self.ui_qr.pushButtonOk, QtCore.SIGNAL('clicked()'), self.generateQr)
# self.ui_qr.pushButtonOk.clicked.connect(self.generateQr) def generateQr(self):
textcontent=self.ui_qr.lineEditInput.text()
if textcontent=='':
QtGui.QMessageBox.information(self, (u'提示'),(u'请填写URL地址'),QtGui.QMessageBox.Yes)
else:
filename='Qrcode.png'
qr = qrcode.QRCode(
version=None,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=5,
border=4,
)
qr.add_data(textcontent)
qr.make(fit=True)
img = qr.make_image()
img.save(filename)
# img = qrcode.make(textcontent)
# img.save(filename)
self.ui_qr.label.setPixmap(QtGui.QPixmap(filename)) # 重载keyPressEvent , 当按下Esc退出
def keyPressEvent(self, event):
if event.key() ==QtCore.Qt.Key_Escape:
self.close() if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
qr = showQr()
qr.show()
sys.exit(app.exec_())
运行效果:


2.识别二维码
解析二维码用到zbar模块
扯蛋的zbar 在Pypi中只有py25 和py26 版本,更新时间还是2009年, 下载后py27还用不了!
最后在github 中找到支持Py27的zbar库
地址: https://github.com/jacobvalenta/zbar-py27-msi
one_qr_code.png

代码:
from PIL import Image
import zbar def get_QR():
scanner = zbar.ImageScanner()
scanner.parse_config("enable")
pil = Image.open("one_qr_code.png").convert('L')
width, height = pil.size
raw = pil.tostring()
image = zbar.Image(width, height, 'Y800', raw)
scanner.scan(image)
data = ''
for symbol in image:
data+=symbol.data
del(image)
return data qrdata= get_QR()
print(qrdata)
返回解析结果:
http://weixin.qq.com/r/n0zE3NfEaooVrZO-9xmN
Pyqt+QRcode 生成 识别 二维码的更多相关文章
- 微信支付-无法识别qrcode生成的二维码图片
1.开始使用 table方式,但是还是无法识别二维码 http://www.cnblogs.com/staticed/p/8549316.html var code_url = data.code_ ...
- 为jquery qrcode生成的二维码嵌入图片
在一次微信项目中,需要实现通过扫描二维码来进行会议签到,二维码的生成选择了qrcode.js的版本,然后使用jquery.qrcode.js插件来绘制二维码. <script type=&quo ...
- ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法
"索引超出了数组界限"也有可能确实是因为你选择的二维码Version对应的容量不足以存储你所放的内容,如果你确定使用的版本容量二维码能存储你的内容,但还是报错,那么再考虑此解决方法 ...
- jquery.qrcode二维码插件生成彩色二维码
jquery.qrcode.js 是居于jquery类库的绘制二维码的插件,用它来实现二维码图形渲染支持canvas和table两种绘图方式. (jquery.qrcode.js 设置显示方式为tab ...
- Python3+qrcode+zxing生成和识别二维码教程
一.安装依赖库 pip install qrcode pillow image zxing pillow是python3中PIL的代替库,image是生成图版需要用到的库 安装image时报错“Cou ...
- python实现树莓派生成并识别二维码
python实现树莓派生成并识别二维码 参考来源:http://blog.csdn.net/Burgess_Liu/article/details/40397803 设备及环境 树莓派2代 官方系统R ...
- HTML5实现扫描识别二维码/生成二维码
扫描识别二维码 思路: 1. 操作摄像头,获取图片.HTML5 WEBRTC的navigator.getUserMedia方法去实时获取摄像头资源. 2. 利用canvas使用相关算法分析图片识别图 ...
- C#生成和识别二维码
用到外部一个DLL文件(ThoughtWorks.QRCode.dll),看效果 生成截图 识别截图 生成二维码后右键菜单可以保存二维码图片,然后可以到识别模式下进行识别,当然生成后可以用手机扫描识别 ...
- PHP 生成、识别二维码及安装相关扩展/工具
2018-02-20 00:30:26 更新:推荐新扩展(极力推荐) 这篇文章里用的两个二维码扩展都有些问题和麻烦:phpqrcode(生成二维码)的源码有点小 bug: 而 php-zbarcod ...
随机推荐
- 线段树 HDU 3397(真)
5 种操作 0 1 然后 异或 似乎这种2个更新的先后每次都搞不清 覆盖有覆盖就可以不异或 也不知道为什么 #include<stdio.h> #include<string.h& ...
- for循环嵌套执行效率
今天做项目时遇到一个for循环的嵌套问题,一个循环次数多,一个次数少,怎样设计效率较高. 想起以前笔试时遇到过这个问题,当时由于时间仓促,没有细想,今天在实际代码中遇到这么问题,于是动笔算了下. 设两 ...
- 架构师养成记--3.synchronized细节问题
一.synchronized有锁重入的特点,某个线程得到对象的锁后,再次请求此对象可以再次得到改对象的锁.如下示例,在method1中调用method2,在method2中调用method3,而met ...
- Alpha阶段第六次Scrum Meeting
情况简述 Alpha阶段第六次Scrum Meeting 敏捷开发起始时间 2016/10/27 00:00 敏捷开发终止时间 2016/10/28 00:00 会议基本内容摘要 提出了目前阶段遇到的 ...
- pair correlation ggpair ggmatrix
https://zhuanlan.zhihu.com/p/23400450 首发于 R语言数据分析与可视化 关注专栏 登录 写文章 R 语言矩阵散点图 EasyCharts· 15 天前 散点 ...
- 去掉你代码里的 document.write("<script...
在传统的浏览器中,同步的 script 标签是会阻塞 HTML 解析器的,无论是内联的还是外链的,比如: <script src="a.js"></script& ...
- IT 外包中的甲方乙方,德国人,美国人,印度人和日本人印象杂谈
开篇介绍 最近经常和朋友聚会,三十而立的年龄自然讨论最多的就是各自的小家庭,如何赚钱,工作,未来的就业发展,职业转型等话题.还有各种跳槽,机会选择,甲方乙方以及外包中的各种趣事,外企与国内私企的发展机 ...
- JDI tutorial (trace example)
Components Debugger Interfaces / |--------------| / | VM | debuggee ----( |--------------| <----- ...
- tyvj1148 小船弯弯
描述 童年的我们,充满了新奇的想法.这天,小朋友们用彩虹画笔在云霞上绘制了世界上最美丽的图画.那描绘的是一条大河波浪宽,风吹稻花香两岸的情景.欣赏着自己的作品,小朋友们别提多开心了.这时,Q小朋友对C ...
- bzoj1045 糖果传递
escription 老师准备了一堆糖果, 恰好n个小朋友可以分到数目一样多的糖果. 老师要n个小朋友去拿糖果, 然后围着圆桌坐好, 第1个小朋友的左边是第n个小朋友, 其他第i个小朋友左边是第i-1 ...