基于PyQT5制作一个二维码生成器

 更新时间:2021年12月29日 08:40:34   作者:Python 集中营  
这篇文章主要介绍了利用PyQT5制作一个简单的二维码生成器,并打包成exe可执行程序。文中的示例代码讲解详细,感兴趣的同学可以了解一下

个性化二维码的exe桌面应用的获取方式我放在文章最后面了,注意查收。通过执行打包后的exe应用程序可以直接运行生成个性化二维码。

开始之前先来看一下通过二维码生成器是如何生成个性化二维码的。

其中使用的python包和之前的GUI应用制作使用的模块是一样的。

# -*- coding:utf-8 -*-
import os

import sys

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

from PyQt5.QtCore import *

import images

这里的images模块是用于解决打包应用时外部图片的引用不能生效的问题。后面的一篇文章中将会说明如何将外部资源打包到exe的应用中去。

做GUI的桌面应用,首先还是使用pyqt5进行界面的布局和界面组件的添加,虽然代码量看起来比较多,但逻辑不多。

# -*- coding:utf-8 -*-
    def init_ui(self):
        grid = QGridLayout()

        self.picture_name = ''
        self.words_label = QLabel()
        self.words_label.setText('链接设置:')
        self.words_text = QLineEdit()
        self.words_text.setPlaceholderText('www.baidu.com')
        self.words_text.setAttribute(Qt.WA_InputMethodEnabled, False)

        self.version_label = QLabel()
        self.version_label.setText('边距设置(只允许微调):')
        self.version_text = QSpinBox()
        self.version_text.setRange(1, 3)
        self.version_text.setValue(1)

        self.picture_text = QLineEdit()
        self.picture_text.setPlaceholderText('个性化图片路径')
        self.picture_text.setReadOnly(True)
        self.picture_button = QPushButton()
        self.picture_button.setText('个性化图片')
        self.picture_button.clicked.connect(self.picture_button_click)

        self.colorized_label = QLabel()
        self.colorized_label.setText('是否显示为彩色:')
        self.colorized_text = QComboBox()
        colorized_items = ['是', '否']
        self.colorized_text.addItems(colorized_items)
        self.colorized_text.setCurrentIndex(1)

        self.brightness_label = QLabel()
        self.brightness_label.setText('调节图片亮度:')
        self.brightness_text = QDoubleSpinBox()
        self.brightness_text.setRange(1, 10)
        self.brightness_text.setSingleStep(1.0)

        self.save_dir_text = QLineEdit()
        self.save_dir_text.setPlaceholderText('存储目录')
        self.save_dir_text.setReadOnly(True)
        self.save_dir_button = QPushButton()
        self.save_dir_button.setText('自定义路径')
        self.save_dir_button.clicked.connect(self.save_dir_button_click)

        self.generate_button = QPushButton()
        self.generate_button.setText('快速生成二维码')
        self.generate_button.clicked.connect(self.generate_button_click)

        self.version_current = QLabel()
        self.version_current.setText('默认二维码为作者公众号,版本声明:本应用由公众号 [Python 集中营] 发布!')
        self.version_current.setAlignment(Qt.AlignCenter)
        self.version_current.setStyleSheet('color:red')

        self.image = QLabel()
        self.image.setScaledContents(True)
        self.image.setMaximumSize(200, 200)
        self.image.setPixmap(QPixmap(':/default.png'))

        grid.addWidget(self.words_label, 0, 0, 1, 1)
        grid.addWidget(self.words_text, 0, 1, 1, 2)
        grid.addWidget(self.version_label, 1, 0, 1, 2)
        grid.addWidget(self.version_text, 1, 2, 1, 1)
        grid.addWidget(self.picture_text, 2, 0, 1, 2)
        grid.addWidget(self.picture_button, 2, 2, 1, 1)
        grid.addWidget(self.colorized_label, 3, 0, 1, 2)
        grid.addWidget(self.colorized_text, 3, 2, 1, 1)
        grid.addWidget(self.brightness_label, 4, 0, 1, 2)
        grid.addWidget(self.brightness_text, 4, 2, 1, 1)
        grid.addWidget(self.save_dir_text, 5, 0, 1, 2)
        grid.addWidget(self.save_dir_button, 5, 2, 1, 1)
        grid.addWidget(self.generate_button, 6, 0, 1, 3)

        hbox = QHBoxLayout()
        hbox.addWidget(self.image)
        hbox.addSpacing(30)
        hbox.addLayout(grid)

        vbox = QVBoxLayout()
        vbox.addLayout(hbox)
        vbox.addSpacing(10)
        vbox.addWidget(self.version_current)

        self.setLayout(vbox)

用到的槽函数有三个,一个是为了做选择背景图片、第二个是为了做选择要存储生成后的文件存放路径可以自由选择存放到什么地方、第三个是为了做调起生成二维码的函数。

第一个来看一下如何通过关联槽函数来实现读取需要作为个性化二维码的背景图片。

    def picture_button_click(self):
        import os
        self.cwd = os.getcwd()
        txt_file_path = QFileDialog.getOpenFileName(self, "选取文件", self.cwd, "JPG File (*.jpg);; PNG File (*.png)")
        self.picture_text.setText(txt_file_path[0])
        if self.picture_text.text().strip() != "":
            self.picture_name = txt_file_path[0].split('/')[-1].split('.')[0]
            print(self.picture_name)
        else:
            self.picture_name = ''

第二个就是选择存储文件路径的槽函数。

    def save_dir_button_click(self):
        import os
        self.cwd = os.getcwd()
        directory = QFileDialog.getExistingDirectory(self, '选取文件夹', self.cwd)
        print(directory)
        self.save_dir_text.setText(directory)

是通过dialog对话框的形式获取到自定义选择的存储文件路径。

第三个槽函数就是为了生成个性化二维码,其实二维码的生成部分只有一句代码。那就是MYQR模块提供的run函数,通过这个函数就能实现个性化二维码的生成。

首先,需要导入MYQR这个库。

from MyQR import myqr

为了可以看清楚后面二维码生成函数(run函数),先来看一下这个库提供的run函数都有什么参数。

'''
    myqr.run()  参数解释
    words        需要跳转的链接或者文字
    version        自然数,数字越大边长越大
    level        纠错等级
    picture        结合图片
    colorized    是否显示彩色
    contrast    对比度,默认为1.0
    brightness    亮度  float,调节图片的亮度
    save_name    输出文件名,默认文件名"qrcode.png"
    save_dir    存储位置,默认存储当前目录
'''

下面看一下这个具体生成个性化二维码的槽函数。除了二维码的生成部分和需要将生成后的二维码放到应用的页面上展示之外,其他主要就是一些参数的校验方法。

  def generate_button_click(self):
        from MyQR import myqr
        colorized_index = self.colorized_text.currentIndex()
        print(colorized_index)
        colorized = None
        if colorized_index == 0:
            colorized = True
        else:
            colorized = False
        print(colorized)
        words_text = self.words_text.text()
        words = None
        if words_text.strip() != "":
            words = words_text.strip()
        else:
            words = 'default message: Python is very beautiful'
        print(words)
        version_text = self.version_text.value()
        print(version_text)
        picture_text = self.picture_text.text()
        picture = None
        if picture_text.strip() != "":
            picture = picture_text
        print(picture)
        brightness_text = self.brightness_text.value()
        print(brightness_text)
        save_dir_text = self.save_dir_text.text()
        save_dir = None
        if save_dir_text.strip() != "":
            save_dir = save_dir_text.strip()
        else:
            save_dir = os.getcwd()
        print(save_dir)
        myqr.run(words=str(words), version=int(version_text), level='H', picture=picture,
                 colorized=colorized, contrast=1.0, brightness=float(brightness_text), save_dir=save_dir)
        if self.picture_name.strip() != '':
            map_dir = save_dir + '/' + self.picture_name + '_qrcode.png'
        else:
            map_dir = save_dir + '/' + 'qrcode.png'
        print(map_dir)
        self.image.setPixmap(QPixmap(map_dir)) 

到此这篇关于基于PyQT5制作一个二维码生成器的文章就介绍到这了,更多相关PyQT5二维码生成器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 找到列表中满足某些条件的元素方法

    Python 找到列表中满足某些条件的元素方法

    今天小编就为大家分享一篇Python 找到列表中满足某些条件的元素方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例

    python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例

    这篇文章主要介绍了python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例,需要的朋友可以参考下
    2020-02-02
  • python实现文本文件合并

    python实现文本文件合并

    本文给大家汇总介绍了3种合并文本文件的方法,程序的实现思路都非常不错,这里推荐给大家,有需要的小伙伴可以参考下。
    2015-12-12
  • PyCharm 2020 激活到 2100 年的教程

    PyCharm 2020 激活到 2100 年的教程

    这篇文章主要介绍了PyCharm 2020 激活到 2100 年,本文图文并茂给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Django使用rest_framework写出API

    Django使用rest_framework写出API

    这篇文章主要介绍了Django使用rest_framework写出API,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python实现的文本编辑器功能示例

    Python实现的文本编辑器功能示例

    这篇文章主要介绍了Python实现的文本编辑器功能,结合实例形式详细分析了基于wxpython实现文本编辑器所需的功能及相关实现技巧,需要的朋友可以参考下
    2017-06-06
  • pycharm进入科学模式以及退出方式

    pycharm进入科学模式以及退出方式

    这篇文章主要介绍了pycharm进入科学模式以及退出方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python中给List添加元素的4种方法分享

    Python中给List添加元素的4种方法分享

    这篇文章主要介绍了Python中给List添加元素的4种方法分享,本文讲解了append()、extend()、insert()、加号等4个方法,并给出了操作实例,需要的朋友可以参考下
    2014-11-11
  • python 实现学生信息管理系统的示例

    python 实现学生信息管理系统的示例

    本篇文章主要分享python学生管理系统的使用,文章非常详细地介绍了通过示例代码实现的学生管理系统,该系统对每个人的研究或工作都有一定的参考学习价值,希望你能在其中有所收获。
    2020-11-11
  • 通过python-turtle库实现绘制图画

    通过python-turtle库实现绘制图画

    turtle库是python的基础绘图库,经常被用来给孩子们介绍编程知识的方法库,是标准库之一,利用turtle可以制作很多复杂的绘图。本文将为大家介绍通过turtle库绘制的一些有趣的图画,感兴趣的小伙伴可以学习一下
    2021-12-12

最新评论