Home > Article > Backend Development > Example sharing of renaming gadgets developed with tkinter module in Python
This article mainly introduces the renaming gadget implemented by Python based on the tkinter module, and analyzes the related implementation techniques of the tkinter module to operate file suffix names in the form of examples. Friends in need can refer to the following
The examples of this article are described A renaming gadget implemented in Python based on the tkinter module. Share it with everyone for your reference, the details are as follows:
#!/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()
The above is the detailed content of Example sharing of renaming gadgets developed with tkinter module in Python. For more information, please follow other related articles on the PHP Chinese website!