圆月山庄资源网 Design By www.vgjia.com
本文实例讲述了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程序设计有所帮助。
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月07日
2024年11月07日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]