文章目录
前言
初学Python的时候学到过这个项目,感觉很神奇!通过调用MyQR库实现彩色二维码的合成。在这里我不介绍这个库了,感兴趣的可以自己去搜索,有很多相关的详细教程。
最初很想把它分享给好朋友,无奈不会编写图形界面,一直就存在了自己的博客草稿箱里,今天终于可以把它编写出来分享给大家了,超级开心!
下面的代码讲解部分都是一块一块的比较零碎,最后有完整的代码。包括文末的虚拟环境打包发布EXE程序教程编辑在石墨文档,讲的已经很详细了,不懂得可以私聊我。
效果图
核心功能设计
支持.png、.jpg、.gif、.bmp格式的转换,素材图片自己挑选。
UI排版布局
程序需要的变量不多,共三个输入项:“二维码解析链接”、“素材名”、“成品名”,由于解析链接的输入框较长,所以居中布局,剩下的“素材名”、“成品名”的输入框较短,所以左右对称布局,这样就整体呈现出“对称、标齐”的效果。
素材分为.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()#窗口循环
如何得到.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