本文实例讲述了Python基于tkinter模块实现的改名小工具。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#!/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程序设计有所帮助。