直接上代码
from tkinter import *
from tkinter import filedialog
from tkinter import messagebox
from tkinter import ttk
import os
root = Tk()
root.title('mingo tool')
sw = root.winfo_screenwidth()
sh = root.winfo_screenheight()
#设置窗口高宽,并居中
Width = 700
Hight = 600
cen_x = (sw - Width) / 2
cen_y = (sh - Hight) / 2
root.geometry('%dx%d+%d+%d' % (Width, Hight, cen_x, cen_y))
root.iconphoto(False, PhotoImage(file="mingo.png"))
lab1=Label(root,text='标识')
lab2=Label(root,text='前缀/后缀')
ent1=Entry(root)
fixType = IntVar()
folderPath=StringVar()
messageInfo=StringVar()
def addFix():
if checkParam():
os.chdir(folderPath.get())
fixKey = ent1.get()
count=0
for x in os.listdir('.'):
if os.path.isfile(x):
fileName=os.path.splitext(x)[0]
fileFix=os.path.splitext(x)[1]
if fixType.get()==1:
fileName=fixKey+fileName
else:
fileName+=fixKey
os.rename(x, fileName+fileFix)
count+=1
reloadFileList()
messagebox.showinfo(title="添加成功",message="处理完成,已为文件夹:" + folderPath.get() + ",下 " + str(count) + " 个文件添加了标识。")
def deleteFix():
if checkParam():
os.chdir(folderPath.get())
fixKey = ent1.get()
fixLength = len(fixKey)
count=0
for x in os.listdir('.'):
if os.path.isfile(x):
fileName=os.path.splitext(x)[0]
fileFix=os.path.splitext(x)[1]
if fixType.get()==1:
if fileName[:fixLength]==fixKey:
os.rename(x, fileName[fixLength:]+fileFix)
count+=1
else:
if fileName[-fixLength:]==fixKey:
os.rename(x, fileName[:-fixLength]+fileFix)
count+=1
reloadFileList()
messagebox.showinfo(title="删除成功",message="处理完成,已删除了文件夹:" + folderPath.get() + ",下 " + str(count) + " 个文件的标识。")
def checkParam():
if ent1.get()=="":
messagebox.showerror(title="错误",message="没有填写标识!")
return False
elif fixType.get() != 1 and fixType.get() != 2:
messagebox.showerror(title="错误",message="没有选择前缀/后缀!")
return False
elif folderPath.get() == "":
messagebox.showerror(title="错误",message="没有选择文件夹!")
return False
return True
def showMessage(text,isError):
color="red" if isError else "green"
messageInfo.set(text)
message.configure(foreground=color)
message.grid(row=4,column=0,columnspan=4,padx=10,pady=10)
def slectFolder():
selectPath = filedialog.askdirectory()
folderPath.set(selectPath)
folderMessage.grid(row=0,column=1,columnspan=4,padx=10,pady=10,sticky=W)
reloadFileList()
def reloadFileList():
for child in tree.get_children():
tree.delete(child)
os.chdir(folderPath.get())
for x in os.listdir('.'):
if os.path.isfile(x):
tree.insert("", "end", values=(x))
#创建元素
radio1 = Radiobutton(root, text="前缀", variable=fixType, value=1)
radio2 = Radiobutton(root, text="后缀", variable=fixType, value=2)
btn1=Button(root,text='选择文件夹',command=slectFolder)
btn2=Button(root,text='删除',command=deleteFix,bg='red')
btn3=Button(root,text='添加',command=addFix,bg='green')
folderMessage=Message(root, textvariable=folderPath,width=600)
#布局
btn1.grid(row=0,column=0,padx=10,pady=10)
lab1.grid(row=1,column=0,padx=10,pady=10)
ent1.grid(row=1,column=1,padx=10,pady=10)
lab2.grid(row=2,column=0,padx=10,pady=10)
radio1.grid(row=2,column=1,padx=10,pady=10)
radio2.grid(row=2,column=2,padx=10,pady=10)
btn2.grid(row=3,column=0, columnspan=2,padx=10,pady=10)
btn3.grid(row=3,column=1, columnspan=2,padx=10,pady=10)
message=Message(root, textvariable=messageInfo,width=500)
tree = ttk.Treeview(root, columns=("column"), show="headings",height=15)
tree.heading("column", text="文件列表")
tree.column("column", width=600)
scroll = ttk.Scrollbar(root,orient=VERTICAL,command=tree.yview)
tree.configure(yscrollcommand=scroll.set)
tree.grid(row=5,column=0, columnspan=4,padx=(20,0),pady=10,sticky=NSEW)
scroll.grid(row=5,column=4,sticky=NS)
root.mainloop()
打包成可执行程序
我用的 cx_Freeze 打包,当然还有其它打包工具,这个打包的文件比较小。打包过后可直接点击 exe 文件直接执行程序了,不需要安装 python。