本文實例講述了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許可協(xié)議發(fā)布 # 文件名批量加.xls后綴 # 2014-04-21 創(chuàng)建 # 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程序設計有所幫助。