Python基于tkinter模块实现的改名小工具示例


Posted in Python onJuly 27, 2017

本文实例讲述了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基于更相减损术实现求解最大公约数的方法
Apr 04 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
python直接获取API传递回来的参数方法
Dec 17 Python
Python3 SSH远程连接服务器的方法示例
Dec 29 Python
Python性能分析工具Profile使用实例
Nov 19 Python
Flask之pipenv虚拟环境的实现
Nov 26 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
Python进程Multiprocessing模块原理解析
Feb 28 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
python-jwt用户认证食用教学的实现方法
Jan 19 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 Python
python django 增删改查操作 数据库Mysql
Jul 27 #Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 #Python
Python列表和元组的定义与使用操作示例
Jul 26 #Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 #Python
python基础之入门必看操作
Jul 26 #Python
Python简单定义与使用字典dict的方法示例
Jul 25 #Python
Python学习入门之区块链详解
Jul 25 #Python
You might like
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
php实现的通用图片处理类
2015/03/24 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
ES6中定义类和对象的方法示例
2019/07/31 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
python里将list中元素依次向前移动一位
2014/09/12 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
python 利用zmail库发送邮件
2020/09/11 Python
Python os库常用操作代码汇总
2020/11/03 Python
留学顾问岗位职责
2014/04/14 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
《将心比心》教学反思
2016/02/23 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
Python Matplotlib绘制动画的代码详解
2022/05/30 Python