Python基于tkinter模块实现的改名小工具示例
本文实例讲述了Python基于tkinter模块实现的改名小工具。分享给大家供大家参考,具体如下:
#!/usr/bin/envpython
#coding=utf-8
#
#版权所有2014yao_yu
#本代码以MIT许可协议发布
#文件名批量加.xls后缀
#2014-04-21创建
#
importos
importtkinterastk
fromtkinterimportttk
version='2014-04-21'
app_title='文件名批量加后缀Ver:'+version
listdir=os.listdir
isdir=os.path.isdir
isfile=os.path.isfile
path_join=os.path.join
#----------------------------ObjectVisit----------------------------#
defvisit_directory_files(root,visitor):
foriinlistdir(root):
i=path_join(root,i)
ifisdir(i):
ifvisit_directory_files(i,visitor):
returnTrue
elifisfile(i):
ifvisitor(i):
returnTrue
#----------------------------Visitor----------------------------#
classListVisitor(object):
def__init__(self,*visitors,terminate=True):
if(visitors
andisinstance(visitors,(list,tuple))
andisinstance(visitors[0],(list,tuple))):
visitors=visitors[0]
self._visitors=list(visitors)
self._terminate=terminate
def__call__(self,*args,**kwdargs):
forvisitorinself._visitors:
ifvisitor(*args,**kwdargs):
returnself._terminate
defappend(self,visitor):
assert(visitor)
self._visitors.append(visitor)
defget_screen_size(window):
returnwindow.winfo_screenwidth(),window.winfo_screenheight()
defget_window_size(window):
returnwindow.winfo_reqwidth(),window.winfo_reqheight()
defcenter_window(root,width,height):
screenwidth=root.winfo_screenwidth()
screenheight=root.winfo_screenheight()
size='%dx%d+%d+%d'%(width,height,(screenwidth-width)/2,(screenheight-height)/2)
root.geometry(size)
classApplication(object):
def__init__(self,master):
self.master=ttk.Frame(master)
self.master.pack(side=tk.TOP,expand=tk.YES,fill=tk.BOTH)
self.create_widgets()
defcreate_widgets(self):
master=self.master
master.columnconfigure(1,weight=1)
master.rowconfigure(2,weight=1)
self.targetdir=tk.StringVar()
self.targetdir.set('/Volumes/Data/Document/Test')
padx=5
pady=10
ttk.Label(master,text="操作目录").grid(row=0,column=0,stick=tk.E,padx=padx,pady=pady)
ttk.Entry(master,textvariable=self.targetdir).grid(row=0,column=1,stick=tk.EW,padx=padx)
commands=ttk.Frame(master)
commands.grid(row=1,column=0,columnspan=2)
ttk.Button(commands,text="开始",command=self.onStart).pack(side=tk.LEFT)
ttk.Button(commands,text="退出",command=master.quit).pack(side=tk.LEFT)
self.status=tk.StringVar()
self.status.set('就绪')
master.rowconfigure(3,minsize=160)
ttk.Label(master,textvariable=self.status,wraplength=600).grid(row=3,column=0,columnspan=2,padx=padx,stick=tk.NSEW)
self.progress=ttk.Progressbar(master,maximum=100,orient=tk.HORIZONTAL,mode='determinate')
self.progress.grid(row=4,column=0,columnspan=2,padx=padx,stick=tk.NSEW)
defonStart(self):
targetdir=self.targetdir.get().strip()
basename=os.path.basename(targetdir)
ifos.path.isdir(targetdir):
listvisitor=ListVisitor(ProgressVisitor(self.progress),
self.StatusVisitor(),
FileLogVisitor(basename),
#FileRenameVisitor(basename),
)
visit_directory_files(targetdir,listvisitor)
else:
self.status.set('目标目录不存在')
defStatusVisitor(self):
print_status=self.status.set
def__call__(file):
__call__.n+=1
print_status('%s,%s'%(__call__.n,file))
__call__.n=0
return__call__
splitext=os.path.splitext
file_rename=os.rename
knownexts=dict.fromkeys(['.jpg','.log','.pdf','.tif','.xls','.zip','.rar'])
classFileRenameVisitor(object):
def__init__(self,file):
self.__fp=open('%s_%s_rename.txt'%(os.path.splitext(__file__)[0],file),'w')
def__call__(self,file):
ext=splitext(file)[1].lower()
ifextnotinknownexts:
file_rename(file,file+'.xls')
self.__fp.write('%s\n'%file)
def__del__(self):
self.__fp.close()
classFileLogVisitor(object):
def__init__(self,file):
self.__fp=open('%s_%s_all.txt'%(os.path.splitext(__file__)[0],file),'w')
def__call__(self,file):
self.__fp.write('%s\n'%file)
def__del__(self):
self.__fp.close()
classProgressVisitor(object):
COUNT=202
def__init__(self,progress,count=COUNT):
self.progress=progress
ifcountandisinstance(count,int)andcount>0:
self.count=count
else:
self.count=self.COUNT
self.n=1
def__call__(self,*args,**kwdargs):
self.n+=1
ifself.n==self.count:
self.progress.step()
self.progress.update()
self.n=1
def__del__(self):
self.progress['value']=0
if__name__=='__main__':
root=tk.Tk()
root.title(app_title)
app=Application(root)
center_window(root,600,240)
tk.mainloop()
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。