700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python一小时开发彩色动态二维码生成器 并使用虚拟化境进行打包发布EXE程序。

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

时间:2023-10-06 17:15:09

相关推荐

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

文章目录

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

前言

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

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

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

效果图

核心功能设计

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

UI排版布局

程序需要的变量不多,共三个输入项:“二维码解析链接”、“素材名”、“成品名”,由于解析链接的输入框较长,所以居中布局,剩下的“素材名”、“成品名”的输入框较短,所以左右对称布局,这样就整体呈现出“对称、标齐”的效果。

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

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

关于图形界面的设计思想

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

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

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

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

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

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

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

只要图片不是太大都是免费的。

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

根据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)

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

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

#接收微信二维码链接的值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#.jpgdef get_v1():v1 = var1.get()return v1#.pngdef get_v2():v2 = var2.get()return v2#.gifdef get_v3():v3 = var3.get()return v3#.bmpdef 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 myqrdef 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

完整代码

from tkinter import *import tkinter as tkfrom ttkbootstrap import Stylefrom MyQR import myqrstyle = 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#.jpgdef get_v1():v1 = var1.get()return v1#.pngdef get_v2():v2 = var2.get()return v2#.gifdef get_v3():v3 = var3.get()return v3#.bmpdef get_v4():v4 = var4.get()return v4#图像生成函数部分def newmethod718():return myqrdef 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的时候学习的,已经很久了,那个时候还挺火的。喜欢的朋友麻烦给个“一键三连”+“关注”。

一起进步!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。