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

简介: 【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_())
相关文章
|
8天前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
158 99
|
8天前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
142 98
|
12天前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
3月前
|
机器学习/深度学习 监控 算法
基于mediapipe深度学习的手势数字识别系统python源码
本内容涵盖手势识别算法的相关资料,包括:1. 算法运行效果预览(无水印完整程序);2. 软件版本与配置环境说明,提供Python运行环境安装步骤;3. 部分核心代码,完整版含中文注释及操作视频;4. 算法理论概述,详解Mediapipe框架在手势识别中的应用。Mediapipe采用模块化设计,包含Calculator Graph、Packet和Subgraph等核心组件,支持实时处理任务,广泛应用于虚拟现实、智能监控等领域。
|
10天前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
2月前
|
算法 数据可视化 数据挖掘
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。
|
2月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
4月前
|
SQL 安全 算法
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
Python 3.14 引入了七大核心技术特性,大幅提升开发效率与应用安全性。其中包括:t-strings(PEP 750)提供更安全灵活的字符串处理;类型注解惰性求值(PEP 649)优化启动性能;外部调试器API标准化(PEP 768)增强调试体验;原生支持Zstandard压缩算法(PEP 784)提高效率;REPL交互环境升级更友好;UUID模块扩展支持新标准并优化性能;finally块语义强化(PEP 765)确保资源清理可靠性。这些改进使Python在后端开发、数据科学等领域更具竞争力。
203 5
解读 Python 3.14:模板字符串、惰性类型、Zstd压缩等7大核心功能升级
|
2月前
|
机器人 API 数据安全/隐私保护
QQ机器人插件源码,自动回复聊天机器人,python源码分享
消息接收处理:通过Flask搭建HTTP服务接收go-cqhttp推送的QQ消息47 智能回复逻辑
|
5月前
|
前端开发 JavaScript 关系型数据库
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
167 6

推荐镜像

更多