1、Excel行数统计工具

源代码

import xlrd
import tkinter as tk
import tkinter.filedialog # 计算一个工作簿中所有Sheet表的行数
def count_book(work_book):
workbook = xlrd.open_workbook(work_book) # 打开excel
sheets = workbook.sheet_names() # 读取所有sheet表,组成list列表
count = 0
for sheet in sheets:
sheet_name = workbook.sheet_by_name(sheet) # 实例化电子表对象sheet_name
count = count + sheet_name.nrows # sheet_name.nrows 单个sheet表的行数
return count class ExcelCountPad:
def __init__(self, root):
root.title("Excel 行数统计工具")
# root.iconbitmap('myicon.jpg') # 根窗口icon root_width = 560
root_height = 330
xscreen = root.winfo_screenwidth()
yscreen = root.winfo_screenheight()
xstart = (xscreen-root_width)/2
ystart = (yscreen-root_height)/2 root.geometry('%dx%d+%d+%d' % (root_width, root_height, xstart, ystart)) self.frm = tk.Frame(root)
self.frm.grid(row=0, column=0, padx='', pady='')
self.frm_left = tk.Frame(self.frm)
self.frm_left.pack(side='left', padx='')
self.frm_right = tk.Frame(self.frm)
self.frm_right.pack(side='right', padx='') self.btn_top = tk.Button(self.frm_left, text='上传Excel', command=self.upload_files)
self.btn_top.grid(row=0, column=0, ipadx='', ipady='')
self.btn_bottom = tk.Button(self.frm_left, text='开始统计', command=self.count_rows)
self.btn_bottom.grid(row=1, column=0, pady='', ipadx='', ipady='')
self.label1 = tk.Label(self.frm_left, text='')
self.label1.grid(row=2, column=0)
self.text1 = tk.Text(self.frm_right, width='', height='')
self.text1.grid(row=0, column=0) def upload_files(self):
selectFileNames = tk.filedialog.askopenfilenames(title='可选择1个或多个文件')#askopenfilename 1次上传1个;askopenfilenames1次上传多个
for selectFile in selectFileNames:
self.text1.insert(tk.END, selectFile+'\n')
self.text1.update() def count_rows(self):
all_count = 0
text_lines = self.text1.get(1.0, tk.END) # text.get方法
for line in text_lines.splitlines(): # splitlines分隔行
if line == '': # 空行处理
break
a_count = count_book(line)
all_count += a_count
self.label1['text'] = '共计:'+str(all_count)+' 行' # 1.改写label值:label1['text']='xx'; 2.str(int)int转str类型 root = tk.Tk()
excelCountPad = ExcelCountPad(root)
root.mainloop()

运行效果

2.手机号加密解密工具

import tkinter as tk
from jpype import *
import os root = tk.Tk() class App:
def __init__(self,root):
root.title("手机号加密解密工具")
root_width = 660
root_height = 430
xscreen = root.winfo_screenwidth()
yscreen = root.winfo_screenheight()
xstart = (xscreen-root_width)/2
ystart = (yscreen-root_height)/2
root.geometry('%dx%d+%d+%d' % (root_width, root_height, xstart, ystart)) self.frm_left = tk.Frame(root)
self.frm_left.grid(row=0, column=0, padx='', pady='', sticky=tk.E)
self.frm_middle = tk.Frame(root)
self.frm_middle.grid(row=0, column=1, sticky=tk.E)
self.frm_right = tk.Frame(root)
self.frm_right.grid(row=0, column=2, padx='', pady='', sticky=tk.E) self.label1 = tk.Label(self.frm_left, text='请输入手机号:', fg='blue', font=('微软雅黑', 11))
self.label1.grid(row=0, column=0, sticky=tk.W)
self.text_left = tk.Text(self.frm_left, width='', height='')
self.text_left.grid(row=2, column=0, padx='')
self.btn1 = tk.Button(self.frm_middle, text='加密>>', fg='red', font=('微软雅黑', 10), command=self.phone_encode)
self.btn1.grid(row=0, column=0)
self.btn2 = tk.Button(self.frm_middle, text='<<解密', fg='green', font=('微软雅黑', 10), command=self.phone_decode)
self.btn2.grid(row=1, column=0, pady='')
self.btn3 = tk.Button(self.frm_middle, text='清 空', font=('微软雅黑', 10), command=self.phone_clear)
self.btn3.grid(row=2, column=0,)
self.label3 = tk.Label(self.frm_right, text='请输入加密后字符串:', fg='blue', font=('微软雅黑', 11))
self.label3.grid(row=0, column=0, sticky=tk.W)
self.text_right = tk.Text(self.frm_right, width='', height='')
self.text_right.grid(row=1, column=0, padx='') def phone_encode(self):
# 读取text_left内容
self.text_left.update()
lines = self.text_left.get(1.0, tk.END)
self.text_right.delete('1.0', tk.END)
for line in lines.splitlines():
if line == '': # 空行处理
break
# 加密后放到text_right内容
self.text_right.insert(tk.END, javaClass.AESEncode(line)+'\n') def phone_decode(self):
# 读取text_right内容
self.text_right.update()
lines = self.text_right.get(1.0, tk.END)
self.text_left.delete('1.0', tk.END)
for line in lines.splitlines():
if line == '': # 空行处理
break
# 加密后放到text_right内容
self.text_left.insert(tk.END, javaClass.AESDncode(line)+'\n') def phone_clear(self):
#清空text中内容
self.text_left.delete(0.0, tk.END)
self.text_left.update()
self.text_right.delete(0.0, tk.END)
self.text_right.update() app = App(root) classpath = os.path.join(os.path.abspath('.'), './')
startJVM(getDefaultJVMPath(), "-ea", "-Djava.class.path=%s" %(classpath))
javaClass = JClass('Test') root.mainloop()
shutdownJVM()

注:调用的java类Test从开发代码中获取的,不方便公布

运行效果

Python_tkinter(5)_GUI工具的更多相关文章

  1. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  2. 细说前端自动化打包工具--webpack

    背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...

  3. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  4. .NetCore中的日志(2)集成第三方日志工具

    .NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...

  5. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  6. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  7. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  8. CorelDRAW X8 如何破解激活(附国际版安装包+激活工具) 2016-12-15

    之前有位搞平面的好友“小瘦”说CDR X8无法破解,只能用X7.呃……呃……呃……好像是的 其实CDR8难激活主要在于一个点“没有离线激活了,只可以在线激活”,逆天不是专供逆向的,当然没能力去破解,这 ...

  9. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

随机推荐

  1. 在右键菜单中加入BitLocker重新上锁功能

    当使用BitLocker给磁盘上锁后,可以通过命令:manage-bde -lock d: -forcedismount 将已经解锁的磁盘重新上锁,如果觉得每次都通过命令行写命令很麻烦,那可以通过修改 ...

  2. Python-爬虫-Beautifulsoup解析

    简介 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省 ...

  3. Improved dual-mode compressive tracking integrating balanced colour and texture features

    <改进的集成平衡颜色和纹理特征的双模压缩跟踪> 摘要:将跟踪问题视为分析目标和背景信息的分类问题的判别跟踪方法可以实现最先进的性能.作为一个高性能判别器,压缩跟踪近来受到很多关注.然而,当 ...

  4. Servlet(五):请求转发和重定向

    请求转发: 问题: 服务器在接收到浏览器的请求后,仅仅使用一个 Servlet进行请求处理,会造成不同的Servlet逻辑代码 冗余,Servlet的职责不明确. 解决: 使用请求转发. 特点: 一次 ...

  5. Mapreduce的排序(全局排序、分区加排序、Combiner优化)

    一.MR排序的分类 1.部分排序:MR会根据自己输出记录的KV对数据进行排序,保证输出到每一个文件内存都是经过排序的: 2.全局排序: 3.辅助排序:再第一次排序后经过分区再排序一次: 4.二次排序: ...

  6. Skeleton Screen -- 骨架屏--应用

    案例:使用 现已经在支付的项目使用 用户体验一直是前端开发需要考虑的重要部分,在数据请求时常见到锁屏的loading动画,而现在越来越多的产品倾向于使用Skeleton Screen Loading( ...

  7. Android 常见问题解决

    1.Android 启动Activity后阻止EditText自动获取焦点 在EditText中添加如下属性即可 <LinearLayout android:focusable="tr ...

  8. Python-读文件

    用python读一个文件,我们一般采用  open('文件名字')这里的文件名可以说完整路径也可以是相对路径(要读取的文件和和代码放在一起) f = open('data.txt')此时我们只是打开了 ...

  9. Egret--设置全屏,控制浏览器全屏

    1, 手机浏览器打开的项目的时候,浏览器的虚拟按键/标题栏, 使得即便设置全屏也没有变成全屏(好像JS 中有方法向浏览器请求全屏) 2, 加载资源, 关闭后卸载, 再次进入游戏依然很快.不过登陆游戏的 ...

  10. Java虚拟机-对象的创建和访问

    一.对象的创建: 创建对象在java上面是很简单的,使用new关键字就可以了,但是其实在虚拟机中,java对象的创建是一个复杂的过程. 当java虚拟机遇到一个new的指令的时候,对象创建的程序正式启 ...