Python3批量改名---网课小助手(2)
Python3批量改名---网课小助手(2)
前情提要
在上一篇文章里我们实现里改名和打包的功能
Python3批量改名
但离我们想要的那种有图形界面的软件还相差甚远,所以今天我们要用Python的tkinter来做一个界面
Tkinter
我们先创建一个新的文件gui.py
来实验tkinter并将之前的main.py
整合
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import tkinter
top = tkinter.Tk()
top.mainloop()
tkinter.Tk()
用途:实例化一个新的窗口mainloop()
用途:进入消息循环(显示窗口)
有了基础的框架,我们就可以往上挂东西了
具体控件请参考菜鸟教程
现在看看我们需要什么
见代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import tkinter
top = tkinter.Tk()
Label_1 = tkinter.Label(top, text = "输入名字")
Entry_1 = tkinter.Entry(top, bd = 3)
Label_2 = tkinter.Label(top, text = "图片")
List_2 = tkinter.Listbox(top, bd = 3)
Button_1 = tkinter.Button(top, text = "生成zip")
Label_1.pack()
Entry_1.pack()
Label_2.pack()
List_2.pack()
Button_1.pack()
top.mainloop()
效果图
图片拖拽获取路径
原本tkinter这个模块里好像是有这个功能的
但好像被隔离出去了。在我百度之后,网上大部分的解决方案是用windnd
可参考这篇博客和这篇里的评论
用这个方法我们需要pip install windnd
但我不想讲我们的python的库里太繁杂
所以我们用virtualenv
来创建一个有针对性的python
参考virtual教程
创建虚拟环境并激活以后pip install windnd
编写代码测试一下可行性gui.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import tkinter
import windnd
top = tkinter.Tk()
Label_1 = tkinter.Label(top, text = "输入名字")
Entry_1 = tkinter.Entry(top, bd = 3)
Label_2 = tkinter.Label(top, text = "图片")
List_2 = tkinter.Listbox(top, bd = 3)
def get_path(drop_files):
for i in drop_files :
path = i.decode("gbk")
List_2.insert()
return
def create():
print("生成")
return
Button_1 = tkinter.Button(top, text = "生成zip", command = create)
Label_1.pack()
Entry_1.pack()
Label_2.pack()
List_2.pack()
Button_1.pack()
windnd.hook_dropfiles(List_2.winfo_id(),get_path)
top.mainloop()
可行之后我们就可以吧main.py
里的东西整合进去了
重构 (融合)
本人代码功底不行,bug出了好多
直接贴调试完的代码吧
gui.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import tkinter
import windnd
import lib
top = tkinter.Tk()
path_list = []
Label_1 = tkinter.Label(top, text = "输入名字")
Entry_1 = tkinter.Entry(top, bd = 3)
Label_2 = tkinter.Label(top, text = "图片")
List_2 = tkinter.Listbox(top, bd = 3, width = 50)
def create():
lib.create(Entry_1.get(),path_list)
print("生成成功")
def get_path(drop_files):
for i in drop_files :
path = i.decode("gbk")
path_list.append(path)
#print(os.path.basename(path))
List_2.insert("end",path+'\n')
#print(path_list)
Button_1 = tkinter.Button(top, text = "生成zip", command = create)
Label_1.pack()
Entry_1.pack()
Label_2.pack()
List_2.pack()
Button_1.pack()
windnd.hook_dropfiles(List_2.winfo_id(),get_path)
top.mainloop()
lib.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#作者:LRD
#博客教程:https://www.cnblogs.com/Lird2002/p/14314711.html
#仅供学习参考
#导入库
import os, sys
import time
import zipfile
def create_flie_name(user_name):
time_now = time.localtime(time.time())
return user_name+"_"+str(time_now[1])+"_"+str(time_now[2])
def trans_name(old_name,file_name):
new_file_name = file_name+".png"
print(old_name)
print(new_file_name)
os.rename(old_name,new_file_name)
def create(user_name, old_files):
zipfile_name = create_flie_name(user_name)
zip_f = zipfile.ZipFile(zipfile_name+".zip",'w',zipfile.ZIP_STORED)
for i in range(len(old_files)):
new_name = zipfile_name+"_"+str(i+1)
trans_name(old_files[i],new_name)
print(i)
zip_f.write(new_name+".png")
zip_f.close()
蒟蒻第一次写博客项目,
大佬轻喷
参考
https://www.cnblogs.com/Lird2002/p/14314711.html
https://www.runoob.com/python/python-gui-tkinter.html
https://blog.csdn.net/devil6636252/article/details/109516239?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
https://bbs.csdn.net/topics/391056949
https://www.jianshu.com/p/224cd092753b