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程序设计有所帮助。