本文实例讲述了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程序设计有所帮助。