Python:tkinter实例改名小工具

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1#!/usr/bin/env python2#coding=utf-83#4#版权所有 2014 yao_yu (http://blog.csdn.net/yao_yu_126)5#本代码以MIT许可协议发布6#文件名批量加.xls后缀7#2014-04-21 创建8#910importos11importtkinter as tk12fromtkinterimportttk13141516version ='2014-04-21'17app_title ='文件名批量加后缀 Ver:'+version1819listdir =os.listdir20isdir =os.path.isdir21isfile =os.path.isfile22path_join =os.path.join2324#---------------------------- Object Visit ----------------------------#25defvisit_directory_files(root, visitor):26foriinlistdir(root):27i =path_join(root, i)28ifisdir(i):29ifvisit_directory_files(i, visitor):30returnTrue31elifisfile(i):32ifvisitor(i):33returnTrue3435#---------------------------- Visitor ----------------------------#36classListVisitor(object):37def__init__(self, *visitors, terminate =True):38if(visitors39andisinstance(visitors, (list, tuple))40andisinstance(visitors[0], (list, tuple))):41visitors =visitors[0]42self._visitors =list(visitors)43self._terminate =terminate44def__call__(self, *args, **kwdargs):45forvisitorinself._visitors:46ifvisitor(*args, **kwdargs):47returnself._terminate48defappend(self, visitor):49assert(visitor)50self._visitors.append(visitor)5152defget_screen_size(window):53returnwindow.winfo_screenwidth(),window.winfo_screenheight()5455defget_window_size(window):56returnwindow.winfo_reqwidth(),window.winfo_reqheight()5758defcenter_window(root, width, height):59screenwidth =root.winfo_screenwidth()60screenheight =root.winfo_screenheight()61size ='%dx%d+%d+%d'% (width, height, (screenwidth - width)/2, (screenheight - height)/2)62root.geometry(size)6364classapplication(object):65def__init__(self, master):66self.master =ttk.Frame(master)67self.master.pack(side = tk.TOP, expand = tk.YES, fill =tk.BOTH)68self.create_widgets()6970defcreate_widgets(self):71master =self.master72master.columnconfigure(1, weight=1)73master.rowconfigure(2, weight=1)74self.targetdir =tk.StringVar()75self.targetdir.set('/Volumes/Data/Document/Test')76padx = 577pady = 1078ttk.Label(master, text="操作目录").grid(row = 0, column = 0, stick = tk.E, padx = padx, pady =pady)79ttk.Entry(master, textvariable = self.targetdir).grid(row = 0, column = 1, stick = tk.EW, padx =padx)80commands =ttk.Frame(master)81commands.grid(row = 1, column = 0, columnspan = 2)82ttk.Button(commands, text="开始", command = self.onStart).pack(side =tk.LEFT)83ttk.Button(commands, text="退出", command = master.quit).pack(side =tk.LEFT)8485self.status =tk.StringVar()86self.status.set('就绪')87master.rowconfigure(3, minsize = 160)88ttk.Label(master, textvariable = self.status, wraplength=600).grid(row = 3, column = 0, columnspan = 2, padx = padx, stick =tk.NSEW)89self.PRogress = ttk.Progressbar(master, maximum=100, orient=tk.HORIZONTAL, mode='determinate')90self.progress.grid(row = 4, column = 0, columnspan = 2, padx = padx, stick =tk.NSEW)9192defonStart(self):93targetdir =self.targetdir.get().strip()94basename =os.path.basename(targetdir)95ifos.path.isdir(targetdir):96listvisitor =ListVisitor(ProgressVisitor(self.progress),97self.StatusVisitor(),98FileLogVisitor(basename),99#FileRenameVisitor(basename),100)101visit_directory_files(targetdir, listvisitor)102else:103self.status.set('目标目录不存在')104105defStatusVisitor(self):106print_status =self.status.set107def__call__(file):108__call__.n += 1109print_status('%s,%s'% (__call__.n, file))110__call__.n =0111return__call__112113splitext =os.path.splitext114file_rename =os.rename115knownexts = dict.fromkeys(['.jpg','.log','.pdf','.tif','.xls','.zip','.rar'])116classFileRenameVisitor(object):117def__init__(self, file):118self.__fp= open('%s_%s_rename.txt'% (os.path.splitext(__file__)[0], file),'w')119def__call__(self, file):120ext = splitext(file)[1].lower()121ifextnotinknownexts:122file_rename(file, file +'.xls')123self.__fp.write('%s\n'%file)124def__del__(self):125self.__fp.close()126127classFileLogVisitor(object):128def__init__(self, file):129self.__fp= open('%s_%s_all.txt'% (os.path.splitext(__file__)[0], file),'w')130def__call__(self, file):131self.__fp.write('%s\n'%file)132def__del__(self):133self.__fp.close()134135classProgressVisitor(object):136COUNT = 202137def__init__(self, progress, count=COUNT):138self.progress =progress139ifcountandisinstance(count, int)andcount >0:140self.count =count141else:142self.count =self.COUNT143self.n = 1144def__call__(self, *args, **kwdargs):145self.n += 1146ifself.n ==self.count:147self.progress.step()148self.progress.update()149self.n = 1150def__del__(self):151self.progress['value'] =0152153154if__name__=='__main__':155root =tk.Tk()156root.title(app_title)157app =Application(root)158center_window(root, 600, 240)159tk.mainloop()

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航