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连接字符串的方法小结
Jul 13 Python
python图像常规操作
Nov 11 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
启动Atom并运行python文件的步骤
Nov 09 Python
把pandas转换int型为str型的方法
Jan 29 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
python Pandas如何对数据集随机抽样
Jul 29 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
Python函数的默认参数设计示例详解
Dec 01 Python
python time.strptime格式化实例详解
Feb 03 Python
python基础详解之if循环语句
Apr 24 Python
Python Numpy库的超详细教程
Apr 06 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中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
详解python配置虚拟环境
2019/04/08 Python
Django REST framework 分页的实现代码
2019/06/19 Python
Puppeteer使用示例详解
2019/06/20 Python
详解python中的模块及包导入
2019/08/30 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
2014年医学生毕业自我鉴定
2014/03/26 职场文书
语文教育专业求职信
2014/06/28 职场文书
委托书格式范文
2015/01/28 职场文书
检讨书格式
2015/05/07 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python