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. 【原创】大数据基础之Mesos(1)简介、安装、使用

    Mesos 1.7.1 官方:http://mesos.apache.org/ 一 简介 Program against your datacenter like it’s a single pool ...

  2. nginx——location匹配流程图

    location匹配流程图 location理解 1.收到url请求后,nginx首先进行精确匹配(有“=”的为精确匹配),如果匹配成功,则直接返回精确匹配结果,如果没有命中则会继续向下进行普通匹配 ...

  3. Oracle中和mysql中函数的区别

    oracle                  -->                 mysqlto_char(sysdate,'yyyy-mm-dd')-->date_format(s ...

  4. 阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试

    阿里云各Linux发行版netcore兼容性评估报告---来自大石头的测试 结论:    优先选择CentOS/Ubuntu,可选AliyunLinux(CentOS修改版)              ...

  5. linux安装git方法

    用git --version命令检查是否已经安装 在CentOS5的版本,由于yum源中没有git,所以需要预先安装一系列的依赖包.在CentOS6的yum源中已经有git的版本了,可以直接使用yum ...

  6. sql多字段相减///单字段多值

    SELECT IFNULL(t.预算金额,)-IFNULL(t.实使用金额,)-IFNULL(SUM(f.已审核.待审核总数),)remainingMoney FROM 表名 t LEFT JOIN ...

  7. C# 数据为空,不能对NULL调用此方法或属性的解决办法

    在运行C#项目时,报出了以下错误,错误原因是数据库中的值为null时,查询时会触发该错误提示 部分源代码如下: public List<Student> findData2() { ; / ...

  8. C#中new的三种用法

    在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员. 3)new ...

  9. CodeForces - 1013C C - Photo of The Sky 贪心

    题目链接: https://vjudge.net/problem/1735276/origin 题目大意与思路: 题目的基本意思就是求一个矩形的最小面积. 这个可以用最大最小值, 将他们分为X和Y组. ...

  10. java 多态 向上 向下转型

    向上转型 将子类对象当作父类对象     子类对象------>父类对象 先实例化子类 父类 父类对象 = 子类实例 package test2; class Father{ public vo ...