最近一直在进行Python的学习目前还属于初级阶段,正好学习到了GUI部分,tkinter这部分确实还是蛮需要联系的,于是就从网上找到了这么一个小程序的创意,制作个性二维码,主要就是有一个图片背景的二维码:
功能实现部分主要还是通过MyQR库来实现,实际上myqr.run()一个函数就可以实现功能,所以用来练习tkinter的使用还是不错的。
还是没有多好看,但是总归来说,自己还是比较满意自己的进步的。
上代码:
from MyQR import myqr
from tkinter import *
import tkinter.messagebox
import tkinter.filedialog
import os
#背景图片浏览功能
def browse_picture():
fileName = tkinter.filedialog.askopenfilename()
fileName_picture.set(fileName)
#保存路径浏览功能
def browse_save():
fileName = tkinter.filedialog.asksaveasfilename()
(filepath, name) = os.path.split(fileName)
fileName_save.set(filepath)
global tempfilename
tempfilename += name
#生成功能
def generate():
content = e1.get()
background = e2.get()
save_location = e3.get()
try:
if background == '':
myqr.run(words = content,save_dir = save_location,save_name = tempfilename,colorized = True)
else:
myqr.run(words = content,save_dir = save_location,picture = background,save_name = tempfilename,colorized = True)
except ValueError as reason:
tkinter.messagebox.showerror(title='错误', message = reason)
root = Tk()
root.title('个性二维码')#标题
root.resizable(0,0)#不可调整大小
tempfilename = ''
#文本部分
Label(root, text="链接内容:").grid(row=0,padx = 5)
Label(root, text="图片背景:").grid(row=1,pady = 10)
Label(root, text="保存路径:").grid(row=2,padx = 5)
#输入框部分
fileName_picture = StringVar()
fileName_save = StringVar()
e1 = Entry(root,width = 40)
e2 = Entry(root,width = 40,textvariable = fileName_picture)
e3 = Entry(root,width = 40,textvariable = fileName_save)
e1.grid(row = 0,column = 1,padx = 5,pady = 5)
e2.grid(row = 1,column = 1,padx = 5,pady = 5)
e3.grid(row = 2,column = 1,padx = 5,pady = 5)
#按钮部分
b1 = Button(root,text = '生成',bd = 5,width = 10,command = generate).grid(row=4, column=0, sticky=W, padx=10, pady=5)
b2 = Button(root,text = '退出',bd = 5,width = 10,command = root.quit).grid(row=4, column=1, sticky=E, padx=10, pady=5)
b3 = Button(root,text = '浏览',bd = 2,width = 5, command = browse_picture).grid(row = 1,column=1,sticky=E)
b4 = Button(root,text = '浏览',bd = 2,width = 5, command = browse_save).grid(row = 2,column=1,sticky=E)
root.mainloop()
为了制作出一个和平常使用的感觉差不多的使用方式,还是费了一番功夫,
主要在于保存路径Entry录入框这里
原本的方式 tkinter.filedialog 直接返回了一个包括文件名在内的路径,但保存路径实际上是到一个文件夹的,所以又调用了 os 库,os.path.spli函数对这部分路径进行分割,但是要让文件名不是一个摆设的话,又要想办法加上文件名,最后只好多加了一个名为 tempfilename 的字符串
原本在学习 tkinter 时,是漏掉了 tkinter.filedialog 和 tkinter.messagebox 两个部分的,还想怎么去重新编写两个窗口,警告提示还好,但是文件全路径浏览还真是发了一番愁。