【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_())
相关文章
|
24天前
|
人工智能 机器人 测试技术
【python】python小游戏——开心消消乐(源码)【独一无二】
【python】python小游戏——开心消消乐(源码)【独一无二】
|
24天前
|
存储 人工智能 搜索推荐
【python】python用户管理系统[简易版](源码+报告)【独一无二】
【python】python用户管理系统[简易版](源码+报告)【独一无二】
|
24天前
|
存储 数据挖掘 数据库
【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】
【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】
|
1月前
|
数据可视化 数据挖掘 Python
Python数据可视化:探索Matplotlib的强大功能
数据可视化在如今的数据分析和展示中扮演着至关重要的角色。本文将介绍Python中常用的数据可视化库Matplotlib,深入探讨其功能和应用,帮助读者更好地利用Matplotlib进行数据可视化。
|
1月前
|
机器学习/深度学习 数据可视化 数据处理
Python数据可视化:探索Matplotlib库的强大功能
本文将深入探讨Python中用于数据可视化的重要工具之一——Matplotlib库。通过介绍Matplotlib库的基本概念、常用功能和实际应用案例,帮助读者更好地了解如何利用Matplotlib创建各种吸引人的数据图表。
|
10天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
11天前
|
Python
02-python的基础语法-01python字面量/注释/数据类型/数据类型转换
02-python的基础语法-01python字面量/注释/数据类型/数据类型转换
|
14天前
|
计算机视觉 Python
如何利用Python实现简单的图像处理功能
本文介绍了如何使用Python编程语言和相关库实现简单的图像处理功能。通过学习本文,读者将了解如何读取图像文件、调整图像大小、修改图像亮度和对比度、应用滤镜效果以及保存处理后的图像。这些技术将帮助读者快速入门图像处理领域,并为他们进一步探索更高级的图像处理技术打下基础。
|
16天前
|
JavaScript 前端开发 关系型数据库
旅游规划助手:结合Vue的交云性设计和Python的强大后端功能
【4月更文挑战第11天】本文探讨了如何使用Vue.js和Python(Flask或Django)构建旅游规划助手应用,简化旅行规划。首先,确保安装了Python、Node.js、数据库系统和Git。接着,介绍如何用Python搭建后端API,分别展示了Flask和Django的例子。然后,利用Vue.js初始化前端项目,结合Vuex和Vue Router构建用户界面。最后,通过Axios实现前端与后端的数据通信。这样的架构有利于团队协作和代码维护,便于扩展应用功能。
|
19天前
|
存储 定位技术 数据库
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】