Python一小时开发彩色动态二维码生成器,并使用虚拟化境进行打包发布EXE程序。

文章目录

    • 前言
    • 效果图
    • 核心功能设计
    • UI排版布局
    • 关于图形界面的设计思想
    • 实现步骤(一):从搭建起一个界面开始
      • 如何得到.ico格式的图标?
    • 实现步骤(二):在界面中添加功能部件
    • 实现步骤(三):搭建接收数据的函数
    • 实现步骤(四):搭建功能函数
    • 界面美化
    • 完整代码
    • 使用虚拟环境进行打包,发布属于你的EXE程序
    • 尾言


前言

初学Python的时候学到过这个项目,感觉很神奇!通过调用MyQR库实现彩色二维码的合成。在这里我不介绍这个库了,感兴趣的可以自己去搜索,有很多相关的详细教程。

最初很想把它分享给好朋友,无奈不会编写图形界面,一直就存在了自己的博客草稿箱里,今天终于可以把它编写出来分享给大家了,超级开心!

下面的代码讲解部分都是一块一块的比较零碎,最后有完整的代码。包括文末的虚拟环境打包发布EXE程序教程编辑在石墨文档,讲的已经很详细了,不懂得可以私聊我。

效果图

Python一小时开发彩色动态二维码生成器,并使用虚拟化境进行打包发布EXE程序。_第1张图片

核心功能设计

支持.png、.jpg、.gif、.bmp格式的转换,素材图片自己挑选。

UI排版布局

程序需要的变量不多,共三个输入项:“二维码解析链接”、“素材名”、“成品名”,由于解析链接的输入框较长,所以居中布局,剩下的“素材名”、“成品名”的输入框较短,所以左右对称布局,这样就整体呈现出“对称、标齐”的效果。
Python一小时开发彩色动态二维码生成器,并使用虚拟化境进行打包发布EXE程序。_第2张图片

素材分为.png、.jpg、.gif、.bmp格式,采用Checkbutton勾选项部件,根据自己的素材类型进行勾选即可!这样生成的图片也与素材格式类型保持一致。

在这个基础上设计的比较简单,除了颜色的美化,并没有插入一些图片进行修饰,大家可以在这个基础上进行二次开发。

关于图形界面的设计思想

图形界面我采用的是Python自带的tkinter库,我认为图形界面的学习并不是难的,当你熟练之后,你就会发现,他就是一个“窗口+部件+函数”的一个流程,窗口为我们进一步的设计提供好“容器”,部件为我们所实现的功能打下“基础”,而函数则是我们通过按钮的触发所实现的“功能”。

实现步骤(一):从搭建起一个界面开始

界面就相当于一个画板,有了画板我们才能在上面作画。除此之外,我们还需要准备一些颜料,这样才能让画作丰富多彩,而界面也有很多的装饰,比如界面的标题、图标、尺寸这些。

from tkinter import *
import tkinter as tk

TOP6 = Tk()#初始化一个窗口
TOP6.geometry("575x375")#为这个窗口设置尺寸大小
TOP6.iconbitmap('图标.ico')#指定窗口图标
TOP6.title('彩色动态二维码生成器V1.0')#给窗口取一个名字
TOP6.mainloop()#窗口循环

Python一小时开发彩色动态二维码生成器,并使用虚拟化境进行打包发布EXE程序。_第3张图片

如何得到.ico格式的图标?

在用Python给喜欢的女孩写一个办公小工具,她说棒极了!这篇博文中,我们曾讲解过。

首先在选取自己心仪的图片,然后在图标在线转换网站进行转换即可。

只要图片不是太大都是免费的。
Python一小时开发彩色动态二维码生成器,并使用虚拟化境进行打包发布EXE程序。_第4张图片

实现步骤(二):在界面中添加功能部件

根据UI设计我们需要四种部件:标签(说明数据类型)、输入框(接受数据)、Checkbutton勾选项部件(选择素材格式类型)、按钮(触发功能功能函数)。

#二维码解析链接
label = StringVar()
input_name = Label(TOP6, text='二维码解析链接', font=('楷体', 20)).place(x=175, y=20)
entry20 = Entry(TOP6, bg='#ffffff', width=30, textvariable=label, font=('楷体', 20)).place(x=75, y=80)

#素材类型选项
var1 = StringVar()
var1.set("F")
c = tk.Checkbutton(TOP6, text=".jpg", variable=var1, onvalue="T", offvalue="F")
c.grid(row=30, column=0, sticky=W)
c.place(x=100, y=125)

var2 = StringVar()
var2.set("F")
c = tk.Checkbutton(TOP6, text=".png", variable=var2, onvalue="T", offvalue="F")
c.grid(row=30, column=0, sticky=W)
c.place(x=200, y=125)

var3 = StringVar()
var3.set("F")
c = tk.Checkbutton(TOP6, text=".gif", variable=var3, onvalue="T", offvalue="F")
c.grid(row=30, column=0, sticky=W)
c.place(x=300, y=125)

var4 = StringVar()
var4.set("F")
c = tk.Checkbutton(TOP6, text=".bmp", variable=var4, onvalue="T", offvalue="F")
c.grid(row=30, column=0, sticky=W)
c.place(x=400, y=125)

#素材名
label2 = StringVar()
input_name = Label(TOP6, text='素材名', font=('楷体', 20)).place(x=35, y=180)
entry20 = Entry(TOP6, bg='#ffffff', width=8, textvariable=label2, font=('楷体', 20)).place(x=25, y=230)

#成品名
label3 = StringVar()
input_name = Label(TOP6, text='成品名', font=('楷体', 20)).place(x=450, y=180)
entry20 = Entry(TOP6, bg='#ffffff', width=8, textvariable=label3, font=('楷体', 20)).place(x=440, y=230)


#按钮
BUTTON = Button(TOP6, text="(๑¯ิε ¯ิ๑)",width = 15, height = 2,
                    font=("楷体", 15))

BUTTON.place(x=205, y=320)

Python一小时开发彩色动态二维码生成器,并使用虚拟化境进行打包发布EXE程序。_第5张图片

实现步骤(三):搭建接收数据的函数

光有输入框还不行,输入框的意义是接收需要的数据,所以我们需要构建接收数据的函数。

#接收微信二维码链接的值
def get_QR():
    QR = label.get()
    return QR
#接收素材名字
def get_name():
    name = label2.get()
    return name
#接收成品名
def get_end_name():
    end_name = label3.get()
    return end_name
#.jpg
def get_v1():
    v1 = var1.get()
    return v1
#.png
def get_v2():
    v2 = var2.get()
    return v2
#.gif
def get_v3():
    v3 = var3.get()
    return v3
#.bmp
def get_v4():
    v4 = var4.get()
    return v4

实现步骤(四):搭建功能函数

接收好数据之后我们搭建功能函数,并通过command命令绑定按钮。

下面代码部分,我们将接收的数据放入函数中进行调用。

由于素材有不同的格式,而生成的成品要和素材的格式保持一致,所以我们通过勾选的不同分成四种情况,利用简单的条件判断语句即可实现。

在此函数中设计的还是有一个缺陷,没有生成成功的提示语!大家可以自己动手加上!!!!

BUTTON = Button(TOP6, text="(๑¯ิε ¯ิ๑)",width = 15, height = 2,command = QR_Code,
                    font=("楷体", 15))

BUTTON.place(x=205, y=320)
#图像生成函数部分

def newmethod718():
    return myqr

def QR_Code():
    

    QR = get_QR()
    name = get_name()
    end_name = get_end_name()
    v1 = get_v1()
    v2 = get_v2()
    v3 = get_v3()
    v4 = get_v4()


    if v1 == 'T' and v2 == 'F' and v3 == 'F' and v4 == 'F':
        
        newmethod718().run(
            words=QR,
            # 扫描二维码后,显示的内容,或是跳转的链接
            version=5,  # 设置容错率
            level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
            picture=name+'.jpg',  # 图片所在目录,可以是动图
            colorized=True,  # 黑白(False)还是彩色(True)
            contrast=1.0,  # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
            brightness=1.0,  # 用来调节图片的亮度,用法同上。
            save_name=end_name+'.jpg', 
            )
        


    elif v2 == 'T' and v1 == 'F' and v3 == 'F' and v4 == 'F':
        
        newmethod718().run(
            words=QR,
            # 扫描二维码后,显示的内容,或是跳转的链接
            version=5,  # 设置容错率
            level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
            picture=name+'.png',  # 图片所在目录,可以是动图
            colorized=True,  # 黑白(False)还是彩色(True)
            contrast=1.0,  # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
            brightness=1.0,  # 用来调节图片的亮度,用法同上。
            save_name=end_name+'.png', 
            )
        

    elif v3 == 'T' and v1 == 'F' and v2 == 'F' and v4 == 'F':
        
        newmethod718().run(
            words=QR,
            # 扫描二维码后,显示的内容,或是跳转的链接
            version=5,  # 设置容错率
            level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
            picture=name+'.gif',  # 图片所在目录,可以是动图
            colorized=True,  # 黑白(False)还是彩色(True)
            contrast=1.0,  # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
            brightness=1.0,  # 用来调节图片的亮度,用法同上。
            save_name=end_name+'.gif', 
            )
        

    elif v4 == 'T' and v1 == 'F' and v3 == 'F' and v2 == 'F':
        
        newmethod718().run(
            words=QR,
            # 扫描二维码后,显示的内容,或是跳转的链接
            version=5,  # 设置容错率
            level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
            picture=name+'.bmp',  # 图片所在目录,可以是动图
            colorized=True,  # 黑白(False)还是彩色(True)
            contrast=1.0,  # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
            brightness=1.0,  # 用来调节图片的亮度,用法同上。
            save_name=end_name+'.bmp', 
            )

界面美化

在Python图形界面不够美?三行代码全面美化你的Tkinter界面中,我们已经介绍如何通过三行代码一键美化自己的tkinter界面。

首先引用ttkbootstrap

from ttkbootstrap import Style

然后将TOP6=tk()改为以下代码即可。

style = Style()
style = Style(theme='minty')
TOP6 = style.master

Python一小时开发彩色动态二维码生成器,并使用虚拟化境进行打包发布EXE程序。_第6张图片

完整代码

from tkinter import *
import tkinter as tk
from ttkbootstrap import Style
from MyQR import myqr

style = Style()
style = Style(theme='minty')
TOP6 = style.master
#TOP6 = Tk()#初始化一个窗口
TOP6.geometry("575x375")
TOP6.iconbitmap('图标.ico')#指定图标
TOP6.title('彩色动态二维码生成器V1.0')#指定图标

#接收微信二维码链接的值
def get_QR():
    QR = label.get()
    return QR
#接收素材名字
def get_name():
    name = label2.get()
    return name
#接收成品名
def get_end_name():
    end_name = label3.get()
    return end_name
#.jpg
def get_v1():
    v1 = var1.get()
    return v1
#.png
def get_v2():
    v2 = var2.get()
    return v2
#.gif
def get_v3():
    v3 = var3.get()
    return v3
#.bmp
def get_v4():
    v4 = var4.get()
    return v4

#图像生成函数部分

def newmethod718():
    return myqr

def QR_Code():
    

    QR = get_QR()
    name = get_name()
    end_name = get_end_name()
    v1 = get_v1()
    v2 = get_v2()
    v3 = get_v3()
    v4 = get_v4()


    if v1 == 'T' and v2 == 'F' and v3 == 'F' and v4 == 'F':
        
        newmethod718().run(
            words=QR,
            # 扫描二维码后,显示的内容,或是跳转的链接
            version=5,  # 设置容错率
            level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
            picture=name+'.jpg',  # 图片所在目录,可以是动图
            colorized=True,  # 黑白(False)还是彩色(True)
            contrast=1.0,  # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
            brightness=1.0,  # 用来调节图片的亮度,用法同上。
            save_name=end_name+'.jpg', 
            )
        


    if v2 == 'T' and v1 == 'F' and v3 == 'F' and v4 == 'F':
        
        newmethod718().run(
            words=QR,
            # 扫描二维码后,显示的内容,或是跳转的链接
            version=5,  # 设置容错率
            level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
            picture=name+'.png',  # 图片所在目录,可以是动图
            colorized=True,  # 黑白(False)还是彩色(True)
            contrast=1.0,  # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
            brightness=1.0,  # 用来调节图片的亮度,用法同上。
            save_name=end_name+'.png', 
            )
        

    if v3 == 'T' and v1 == 'F' and v2 == 'F' and v4 == 'F':
        
        newmethod718().run(
            words=QR,
            # 扫描二维码后,显示的内容,或是跳转的链接
            version=5,  # 设置容错率
            level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
            picture=name+'.gif',  # 图片所在目录,可以是动图
            colorized=True,  # 黑白(False)还是彩色(True)
            contrast=1.0,  # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
            brightness=1.0,  # 用来调节图片的亮度,用法同上。
            save_name=end_name+'.gif', 
            )
        

    if v4 == 'T' and v1 == 'F' and v3 == 'F' and v2 == 'F':
        
        newmethod718().run(
            words=QR,
            # 扫描二维码后,显示的内容,或是跳转的链接
            version=5,  # 设置容错率
            level='H',  # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
            picture=name+'.bmp',  # 图片所在目录,可以是动图
            colorized=True,  # 黑白(False)还是彩色(True)
            contrast=1.0,  # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
            brightness=1.0,  # 用来调节图片的亮度,用法同上。
            save_name=end_name+'.bmp', 
            )
        




#二维码解析链接
label = StringVar()
input_name = Label(TOP6, text='二维码解析链接', font=('楷体', 20)).place(x=175, y=20)
entry20 = Entry(TOP6, bg='#ffffff', width=30, textvariable=label, font=('楷体', 20)).place(x=75, y=80)

#素材类型选项
var1 = StringVar()
var1.set("F")
c = tk.Checkbutton(TOP6, text=".jpg", variable=var1, onvalue="T", offvalue="F")
c.grid(row=30, column=0, sticky=W)
c.place(x=100, y=125)

var2 = StringVar()
var2.set("F")
c = tk.Checkbutton(TOP6, text=".png", variable=var2, onvalue="T", offvalue="F")
c.grid(row=30, column=0, sticky=W)
c.place(x=200, y=125)

var3 = StringVar()
var3.set("F")
c = tk.Checkbutton(TOP6, text=".gif", variable=var3, onvalue="T", offvalue="F")
c.grid(row=30, column=0, sticky=W)
c.place(x=300, y=125)

var4 = StringVar()
var4.set("F")
c = tk.Checkbutton(TOP6, text=".bmp", variable=var4, onvalue="T", offvalue="F")
c.grid(row=30, column=0, sticky=W)
c.place(x=400, y=125)

#素材名
label2 = StringVar()
input_name = Label(TOP6, text='素材名', font=('楷体', 20)).place(x=35, y=180)
entry20 = Entry(TOP6, bg='#ffffff', width=8, textvariable=label2, font=('楷体', 20)).place(x=25, y=230)

#成品名
label3 = StringVar()
input_name = Label(TOP6, text='成品名', font=('楷体', 20)).place(x=450, y=180)
entry20 = Entry(TOP6, bg='#ffffff', width=8, textvariable=label3, font=('楷体', 20)).place(x=440, y=230)



BUTTON = Button(TOP6, text="(๑¯ิε ¯ิ๑)",width = 15, height = 2,command = QR_Code,
                    font=("楷体", 15))

BUTTON.place(x=205, y=320)

TOP6.mainloop()

使用虚拟环境进行打包,发布属于你的EXE程序

EXE发布
Python一小时开发彩色动态二维码生成器,并使用虚拟化境进行打包发布EXE程序。_第7张图片

尾言

学会之后的小伙伴可以分享给自己的女朋友…,也可以自娱自乐。这个项目是我初学Python的时候学习的,已经很久了,那个时候还挺火的。喜欢的朋友麻烦给个“一键三连”+“关注”。

一起进步!

你可能感兴趣的:(Python系列,python)