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()
用途:进入消息循环(显示窗口)

有了基础的框架,我们就可以往上挂东西了
具体控件请参考菜鸟教程

现在看看我们需要什么
graph LR A[需求] --> a[输入名字] A --> b[传入图片] a --> B[输出zip] b --> B

见代码

#!/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

posted @ 2021-01-24 18:43  LRD  阅读(148)  评论(0)    收藏  举报