【python】PyQt5实现生成二维码并保存的功能(附源码,带注释)

源码请点赞关注收藏后评论区留言或私信博主要

程序运行结果如下

可以通过调节边距来放缩二维码大小

 

 点击保存二维码后弹出保存文件路径

 

代码分为以下几个模块 1:二维码图形界面模块

	def __init__(self, parent=None):
		super().__init__()
		self.setFixedSize(600, 400)
		self.setWindowTitle('二维码生成器-ljl')
		self.grid = QGridLayout()
		# 定义组件
		# 	--Label
		self.content_label = QLabel('内容:')
		self.size_label = QLabel('尺寸:')
		self.version_label = QLabel('版本:')
		self.margin_label = QLabel('边距:')
		self.rendering_label = QLabel('效果:')
		self.show_label = QLabel()
		# 		使得图片可缩放
		self.show_label.setScaledContents(True)
		# 		显示时的最大尺寸
		self.show_label.setMaximumSize(200, 200)
		# 	--输入框
		self.content_edit = QLineEdit()
		self.content_edit.setText('微信公众号:ljl')
		# 	--按钮
		self.generate_button = QPushButton('生成二维码')
		self.save_button = QPushButton('保存二维码')
		# 	--下拉框
		self.version_combobox = QComboBox()
		for i in range(1, 41):
			self.version_combobox.addItem('%s' % str(i))
		self.size_combobox = QComboBox()
		for i in range(8, 40, 2):
			self.size_combobox.addItem('%s * %s' % (str(i*29), str(i*29)))
		# 	--微调框
		self.margin_spinbox = QSpinBox()
		# 布局
		# 	数字依次对应行, 列, 行数和列数
		self.grid.addWidget(self.rendering_label, 0, 0, 1, 1)
		self.grid.addWidget(self.show_label, 0, 0, 5, 5)
		self.grid.addWidget(self.content_label, 0, 5, 1, 1)
		self.grid.addWidget(self.content_edit, 0, 6, 1, 3)
		self.grid.addWidget(self.version_label, 1, 5, 1, 1)
		self.grid.addWidget(self.version_combobox, 1, 6, 1, 1)
		self.grid.addWidget(self.size_label, 2, 5, 1, 1)
		self.grid.addWidget(self.size_combobox, 2, 6, 1, 1)
		self.grid.addWidget(self.margin_label, 3, 5, 1, 1)
		self.grid.addWidget(self.margin_spinbox, 3, 6, 1, 1)
		self.grid.addWidget(self.generate_button, 4, 5, 1, 2)
		self.grid.addWidget(self.save_button, 5, 5, 1, 2)
		self.setLayout(self.grid)
		self.generate_button.clicked.connect(self.genQrcode)
		self.save_button.clicked.connect(self.saveQrcode)
		self.margin_spinbox.valueChanged.connect(self.genQrcode)
		self.genQrcode()

2:生成二维码模块

	def genQrcode(self):
		content = self.content_edit.text()
		try:
			margin = int(self.margin_spinbox.text())
		except:
			margin = 0
		size = int(self.size_combobox.currentText().split('*')[0])
		qr = qrcode.QRCode(version=1,
						   error_correction=qrcode.constants.ERROR_CORRECT_L,
						   box_size=size//29,
						   border=margin)
		qr.add_data(content)
		self.qr_img = qr.make_image()
		fp = io.BytesIO()
		self.qr_img.save(fp, 'BMP')
		qimg = QtGui.QImage()
		qimg.loadFromData(fp.getvalue(), 'BMP')
		qimg_pixmap = QtGui.QPixmap.fromImage(qimg)
		self.show_label.setPixmap(qimg_pixmap)

3:保存二维码模块

	def saveQrcode(self):
		filename = QFileDialog.getSaveFileName(self, '保存', './qrcode.png', '所有文件(*)')
		if filename[0] != '':
			self.qr_img.save(filename[0])
			QDialog().show()

代码整合后如下


import io
import sys
import qrcode
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import QApplication, QGridLayout, QLabel, QLineEdit, QPushButton, QComboBox, QSpinBox, QFileDialog, QDialog
#pyqt5制作界面常用

'''Demo'''
#图形界面的类
class qrcodeGUI(QtWidgets.QWidget):
	def __init__(self, parent=None):
		super().__init__()
		self.setFixedSize(600, 400)
		self.setWindowTitle('二维码生成器-ljl')
		self.grid = QGridLayout()
		# 定义组件
		# 	--Label
		self.content_label = QLabel('内容:')
		self.size_label = QLabel('尺寸:')
		self.version_label = QLabel('版本:')
		self.margin_label = QLabel('边距:')
		self.rendering_label = QLabel('效果:')
		self.show_label = QLabel()
		# 		使得图片可缩放
		self.show_label.setScaledContents(True)
		# 		显示时的最大尺寸
		self.show_label.setMaximumSize(200, 200)
		# 	--输入框
		self.content_edit = QLineEdit()
		self.content_edit.setText('微信公众号:ljl')
		# 	--按钮
		self.generate_button = QPushButton('生成二维码')
		self.save_button = QPushButton('保存二维码')
		# 	--下拉框
		self.version_combobox = QComboBox()
		for i in range(1, 41):
			self.version_combobox.addItem('%s' % str(i))
		self.size_combobox = QComboBox()
		for i in range(8, 40, 2):
			self.size_combobox.addItem('%s * %s' % (str(i*29), str(i*29)))
		# 	--微调框
		self.margin_spinbox = QSpinBox()
		# 布局
		# 	数字依次对应行, 列, 行数和列数
		self.grid.addWidget(self.rendering_label, 0, 0, 1, 1)
		self.grid.addWidget(self.show_label, 0, 0, 5, 5)
		self.grid.addWidget(self.content_label, 0, 5, 1, 1)
		self.grid.addWidget(self.content_edit, 0, 6, 1, 3)
		self.grid.addWidget(self.version_label, 1, 5, 1, 1)
		self.grid.addWidget(self.version_combobox, 1, 6, 1, 1)
		self.grid.addWidget(self.size_label, 2, 5, 1, 1)
		self.grid.addWidget(self.size_combobox, 2, 6, 1, 1)
		self.grid.addWidget(self.margin_label, 3, 5, 1, 1)
		self.grid.addWidget(self.margin_spinbox, 3, 6, 1, 1)
		self.grid.addWidget(self.generate_button, 4, 5, 1, 2)
		self.grid.addWidget(self.save_button, 5, 5, 1, 2)
		self.setLayout(self.grid)
		self.generate_button.clicked.connect(self.genQrcode)
		self.save_button.clicked.connect(self.saveQrcode)
		self.margin_spinbox.valueChanged.connect(self.genQrcode)
		self.genQrcode()
	'''生成二维码'''
	def genQrcode(self):
		content = self.content_edit.text()
		try:
			margin = int(self.margin_spinbox.text())
		except:
			margin = 0
		size = int(self.size_combobox.currentText().split('*')[0])
		qr = qrcode.QRCode(version=1,
						   error_correction=qrcode.constants.ERROR_CORRECT_L,
						   box_size=size//29,
						   border=margin)
		qr.add_data(content)
		self.qr_img = qr.make_image()
		fp = io.BytesIO()
		self.qr_img.save(fp, 'BMP')
		qimg = QtGui.QImage()
		qim
		filename = QFileDialog.getSaveFileName(self, '保存', './qrcode.png', '所有文件(*)')
		if filename[0] != '':
			self.qr_img.save(filename[0])
			QDialog().show()


if __name__ == '__main__':
	
	gui.show()
	sys.exit(app.exec_())

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

showswoller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值