关于python:pyqt5做了一个二维码生成器已打包成exe可执行程序

26次阅读

共计 5357 个字符,预计需要花费 14 分钟才能阅读完成。

个性化二维码的 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))

代码看起来比拟多,认真理一理也没有很难懂的逻辑解决。有问题或者有更好的解决办法能够在评论区留言大家一起探讨~

个性化二维码生成器的 exe 桌面利用获取形式:公众号内回复“二维码生成器”支付。因为代码篇幅较多,下一篇文章将介绍一下怎么能够将内部资源图片等打包进 PyQt5 的利用中。

【往期精选】

如何在控制台实现一个数据管理系统(包含 MYSQL 数据库的增删改查)

自制文档格局转换器,反对 .txt/.xlsx/.csv 格局转换 …

PyPDF2 如何实现依照 PDF 页码提取后并另存为 PDF 格式文件?

浪漫的 turtle,送给程序员本人的圣诞树!

PyQt5 GUI:百度图片下载器(文末附源码)

正文完
 0