本文实例讲述了Python基于tkinter模块实现的改名小工具。分享给大家供大家参考,具体如下:
#!/usr/bin/env python #coding=utf-8 # # 版权所有 2014 yao_yu # 本代码以MIT许可协议发布 # 文件名批量加.xls后缀 # 2014-04-21 创建 # import os import tkinter as tk from tkinter import ttk version = '2014-04-21' app_title = "文件名批量加后缀 Ver:" + version listdir = os.listdir isdir = os.path.isdir isfile = os.path.isfile path_join = os.path.join #---------------------------- Object Visit ----------------------------# def visit_directory_files(root, visitor): for i in listdir(root): i = path_join(root, i) if isdir(i): if visit_directory_files(i, visitor): return True elif isfile(i): if visitor(i): return True #---------------------------- Visitor ----------------------------# class ListVisitor(object): def __init__(self, *visitors, terminate = True): if (visitors and isinstance(visitors, (list, tuple)) and isinstance(visitors[0], (list, tuple))): visitors = visitors[0] self._visitors = list(visitors) self._terminate = terminate def __call__(self, *args, **kwdargs): for visitor in self._visitors: if visitor(*args, **kwdargs): return self._terminate def append(self, visitor): assert(visitor) self._visitors.append(visitor) def get_screen_size(window): return window.winfo_screenwidth(),window.winfo_screenheight() def get_window_size(window): return window.winfo_reqwidth(),window.winfo_reqheight() def center_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) class Application(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() def create_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) def onStart(self): targetdir = self.targetdir.get().strip() basename = os.path.basename(targetdir) if os.path.isdir(targetdir): listvisitor = ListVisitor(ProgressVisitor(self.progress), self.StatusVisitor(), FileLogVisitor(basename), #FileRenameVisitor(basename), ) visit_directory_files(targetdir, listvisitor) else: self.status.set('目标目录不存在') def StatusVisitor(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']) class FileRenameVisitor(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() if ext not in knownexts: file_rename(file, file + '.xls') self.__fp.write('%s\n' % file) def __del__(self): self.__fp.close() class FileLogVisitor(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() class ProgressVisitor(object): COUNT = 202 def __init__(self, progress, count=COUNT): self.progress = progress if count and isinstance(count, int) and count > 0: self.count = count else: self.count = self.COUNT self.n = 1 def __call__(self, *args, **kwdargs): self.n += 1 if self.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程序设计有所帮助。
本文向大家介绍Python基于Tkinter实现的记事本实例,包括了Python基于Tkinter实现的记事本实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python基于Tkinter实现的记事本。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。
本文向大家介绍Python基于numpy模块实现回归预测,包括了Python基于numpy模块实现回归预测的使用技巧和注意事项,需要的朋友参考一下 代码如下 上面的一段代码利用numpy生成数据序列,并实现了1阶回归,并画出预测效果图,图形如下: 将代码改一下,实现2阶、3阶回归预测,只需要model = np.polyfit(t, y, deg =2)即可,同理3阶模型就把deg改为3即可。 2
本文向大家介绍Python基于paramunittest模块实现excl参数化,包括了Python基于paramunittest模块实现excl参数化的使用技巧和注意事项,需要的朋友参考一下 一、总结说明 Windows环境安装:paramunittest cmd输入命令:pip install paramunittest 总结说明: 1.paramunittest是unittest实现参数化的一
本文向大家介绍Python基于Tkinter的HelloWorld入门实例,包括了Python基于Tkinter的HelloWorld入门实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python基于Tkinter的HelloWorld入门实例。分享给大家供大家参考。具体分析如下: 初学Python,打算做几个Tkinter的应用来提高。 刚学的HelloWorld,秀一下。我用Py
本文向大家介绍python用tkinter实现一个gui的翻译工具,包括了python用tkinter实现一个gui的翻译工具的使用技巧和注意事项,需要的朋友参考一下 运行效果: 自己可以用pyinstaller 打包成 exe随时可以用。 省去了再打开网页去搜 索翻译网页,下载翻译软件。 以上就是python用tkinter实现一个gui的翻译工具的详细内容,更多关于python 翻译工具的资料
本文向大家介绍Python实现清理微信僵尸粉功能示例【基于itchat模块】,包括了Python实现清理微信僵尸粉功能示例【基于itchat模块】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现清理微信僵尸粉功能。分享给大家供大家参考,具体如下: 原理 通过Pyhton调用itchat模块登录网页版微信,给你所有好友发送特殊符号,对方收不到这个特殊符号,只要有人删了你,你的