windows桌面小工具(Tkinter)

news/2025/2/20 21:44:47/

一. 小工具功能

  • 数据加解密(blowfish)
  • json格式化
  • 获取字符串md5
  • base64解码
  • url解码
  • 获取文件md5

 

二.小工具的实现

  • 界面实现 
def makeico():# 窗口左上角图标src = "ico图标的base编码"data = src.split(',')[1]image_data = base64.b64decode(data)base_dir = os.getenv('APPDATA')path = os.path.join(base_dir, 'tool.ico')with open(path, 'wb') as f:f.write(image_data)def gui_start():makeico() #窗口左上角iconinit_window = Tk()  # 实例化出一个父窗口ZMJ_PORTAL = MY_GUI(init_window)init_window.resizable(False, False)  # 禁止窗口改变大小ZMJ_PORTAL.set_init_window() #窗口ui界面函数init_window.mainloop()  # 父窗口进入事件循环,保持窗口运行,否则界面不展示
class MY_GUI():def __init__(self, init_window_name):self.init_window_name = init_window_name# 设置窗口def set_init_window(self):self.init_window_name.title("TOOL")  # 窗口名# self.init_window_name.geometry('320x160+10+10')                         #290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置self.init_window_name.geometry('1068x681+10+10')# 窗口右上角图标base_dir = os.getenv('APPDATA')path = os.path.join(base_dir, 'tool.ico')self.init_window_name.iconbitmap(path)# 窗口居中screenwidth = self.init_window_name.winfo_screenwidth()screenheight = self.init_window_name.winfo_screenheight()# 设定窗口的大小(长 * 宽)width = self.init_window_name.winfo_width()height = self.init_window_name.winfo_height()# 设置窗口在屏幕居中size = "%dx%d+%d+%d" % (width, height, (screenwidth -width) / 2, (screenheight - height) / 2)self.init_window_name.geometry(size)# 标签self.init_data_label = Label(self.init_window_name, text="待处理数据")self.init_data_label.grid(row=1, column=0)self.result_data_label = Label(self.init_window_name, text="输出结果")self.result_data_label.grid(row=1, column=12)self.key_label = Label(self.init_window_name,text="                  key :")self.key_label.grid(row=0, column=0)# 文本框self.init_data_Text = Text(self.init_window_name, width=65, height=49)  # 原始数据录入框self.init_data_Text.grid(row=2, column=0, rowspan=10, columnspan=10)self.result_data_Text = Text(self.init_window_name, width=75, height=49)  # 处理结果展示self.result_data_Text.grid(row=2, column=12, rowspan=15, columnspan=10)# self.key_data_Text = Text(self.init_window_name, width=45, height=1)  # key录入框# self.key_data_Text.grid(row=0, column=0, columnspan=10)# key值下拉选择框self.key_data_Text = ttk.Combobox(self.init_window_name, width=45, height=10)self.key_data_Text.grid(row=0, column=1, columnspan=10)# 设置下拉菜单中的值self.key_data_Text['value'] = self.get_key_data()self.key_data_Text.current(0)# 解密按钮self.str_trans_to_decrypt_button = Button(self.init_window_name, text="数 据 解 密", bg="darkgoldenrod", width=10, command=self.str_trans_to_decrypt)  # 调用内部解密方法self.str_trans_to_decrypt_button.grid(row=3, column=11)# 加密按钮self.str_trans_to_encrypt_button = Button(self.init_window_name, text="数 据 加 密", bg="darkkhaki", width=10, command=self.str_trans_to_encrypt)  # 调用内部加密方法self.str_trans_to_encrypt_button.grid(row=4, column=11)# json按钮self.str_trans_to_json_button = Button(self.init_window_name, text="json格式化", bg="darkseagreen", width=10, command=self.str_trans_to_json)  # 调用内部json格式化方法self.str_trans_to_json_button.grid(row=5, column=11)# md5按钮self.str_trans_to_md5_button = Button(self.init_window_name, text="字符串转MD5", bg="darkseagreen", width=10, command=self.str_trans_to_md5)  # 调用内部方法md5计算方法self.str_trans_to_md5_button.grid(row=6, column=11)# base64解码按钮self.str_trans_to_json_button = Button(self.init_window_name, text="base64 解 码",bg="darkseagreen", width=10, command=self.str_trans_to_base64decode)  # 调用内部base64解码方法self.str_trans_to_json_button.grid(row=7, column=11)# url解码按钮self.str_trans_to_url_button = Button(self.init_window_name, text="url 解 码", bg="darkseagreen", width=10, command=self.str_trans_to_urldecode)  # 调用内部url解码方法self.str_trans_to_url_button.grid(row=8, column=11)# url解码按钮self.str_trans_to_file_button = Button(self.init_window_name, text="文 件 md5", bg="darkseagreen", width=10, command=self.str_trans_to_filemd)  # 调用内部文件md5加密方法self.str_trans_to_file_button.grid(row=9, column=11)windnd.hook_dropfiles(self.init_data_Text.winfo_id(), self.func)  # 拖拽文件获取路径
  • 功能函数实现 
  1. 数据加密
    def str_trans_to_encrypt(self):data_3 = self.init_data_Text.get(1.0, END)key_ = self.key_data_Text.get()key = key_.split(':')[-1]  # 取:后面的内容#print("data_3 =",data_3)#print("key =",key)if isinstance(data_3, str):try:bs = Blowfish.block_size        # Blowfish.block_size 默认是8        # 得到需要补位的个数# 文本长度%8  --得到当前的文本长度除去整数8的倍数以后的数据# bs - len(plaintext) % bs 得到需要添加的位数plen = (bs - len(data_3.encode("utf-8")) %bs) % bs  # 如果data_3有中文,所以这儿需要encode# print("plen",plen)padding = [0]*plen  # 得到补零的总个数# 补位的需要将格式转化为二进制padding = pack('b'*plen, *padding)# print("padding",padding)# print(base64.b64encode(padding))newcipher = Blowfish.new(key.encode("utf-8"), Blowfish.MODE_ECB)  # 加密对象# print("data3=",data_3.encode("utf-8"))en = newcipher.encrypt(data_3.encode("utf-8") + padding)  # 加密plaintext# print("en",en)en_data = base64.b64encode(en).replace(b'\n', b'')  # base64编码# print("en_data",en_data)# 输出到界面self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, en_data)except:self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, "字符串加密失败")else:self.result_data_Text.insert(1.0, "字符串加密失败")
  2. 数据解密
        def str_trans_to_decrypt(self):data_2 = self.init_data_Text.get(1.0, END).strip().replace("\n", "")key_ = self.key_data_Text.get()key = key_.split(':')[-1]  # 取:后面的内容#print("key =",key)# print("data_2",data_2)if isinstance(data_2, str):try:detext = base64.b64decode(data_2)  # base64解码#print("detext= ",detext)newcipher = Blowfish.new(key.encode("utf-8"), Blowfish.MODE_ECB)  # 解密对象detext = newcipher.decrypt(detext)  # 解密de_data = detext.decode()  # 解码# 输出到界面self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, de_data)except:self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, "字符串解密失败")else:self.result_data_Text.insert(1.0, "字符串解密失败")

  3. json格式化
        def str_trans_to_json(self):data_1 = self.init_data_Text.get(1.0, END).strip().replace("\n", "")#print("src =",src)if isinstance(data_1, str):try:# print(data_1)data_2 = demjson.decode(data_1)json_data = json.dumps(data_2, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False)  # json.dumps()是把python对象转换成json对象的一个过程,生成的是字符串# print(json_data)# 输出到界面self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, json_data)except:self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, "字符串json失败")else:self.result_data_Text.insert(1.0, "字符串json失败")

  4. 字符串md5
        def str_trans_to_md5(self):data = self.init_data_Text.get(1.0, END).strip().replace("\n", "").encode()#print("src =",src)if data:try:myMd5 = hashlib.md5()myMd5.update(data)myMd5_Digest = myMd5.hexdigest()# print(myMd5_Digest)# 输出到界面self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, myMd5_Digest)except:self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, "字符串转MD5失败")else:self.result_data_Text.insert(1.0, "字符串转MD5失败")

  5. base64解码
        def str_trans_to_base64decode(self):data_4 = self.init_data_Text.get(1.0, END).strip().replace("\n", "")if isinstance(data_4, str):try:dedata_4 = base64.b64decode(data_4)data_64 = dedata_4.decode()  # 中文解码# 输出到界面self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, data_64)except:self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, "base64解码失败")else:self.result_data_Text.insert(1.0, "base64解码失败")

  6. url解码
    def str_trans_to_urldecode(self):data_5 = self.init_data_Text.get(1.0, END).strip().replace("\n", "")if isinstance(data_5, str):try:dedata_5 = parse.unquote(data_5)# 输出到界面self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, dedata_5)except:self.result_data_Text.delete(1.0, END)self.result_data_Text.insert(1.0, "url解码失败")else:self.result_data_Text.insert(1.0, "url解码失败")

  7. 文件md5
        def str_trans_to_filemd(self):file_path_str = self.init_data_Text.get(1.0, END).strip().encode()file_path_list = file_path_str.splitlines()#print("file_path =", file_path)self.result_data_Text.delete(1.0,END)   #清楚拖拽之前的内容for i, file_path in enumerate(file_path_list):#print("file_path =", file_path)if file_path:try:with open(file_path, 'rb') as f:md5obj = hashlib.md5()md5obj.update(f.read())_hash = md5obj.hexdigest()# print(str(_hash).upper())file_md5 = str(_hash).upper()#print(file_md5)self.result_data_Text.insert("end", file_md5 + "\n")except:self.result_data_Text.insert("end", "文件MD5失败"+ "\n")else:self.result_data_Text.insert("end", "文件MD5失败"+ "\n")# 文件拖拽def func(self, files):self.init_data_Text.delete(1.0,END)   #清楚拖拽之前的内容for i in files:self.init_data_Text.insert("end", i.decode("gbk")+'\n')

  • 打包成exe文件  


http://www.ppmy.cn/news/545984.html

相关文章

【win】WINDOWS10系统自带桌面整理工具

最近强迫症又犯了,所有东西全丢在桌面,感觉桌面乱糟糟的,但是又不想下一堆没用的什么XX桌面整理工具,恰好看到一篇文写的就是win10自带的桌面整理,超级好用,特此记录下来。 #1-> 新建一个文件夹&#x…

Qt桌面工具包

目录 一、注册登录功能 1、头文件:form.h。功能实现主要引用数据库保存用户信息,同时使用QPaintEvent事件和QPainter画家来实现。 2、form.cpp实现功能代码 3、效果 二、闹钟功能 2、form1.cpp文件,实现功能 3、效果 三、垃圾狗 设计…

[160]八款最佳的远程桌面工具

远程桌面是微软公司为了方便网络管理员管理维护服务器而推出的一项服务。从windows 2000 server版本开始引入,网络管理员使用远程桌面连接程序连接到网络任意一台开启了远程桌面控制功能的计算机上,就好比自己操作该计算机一样,运行程序&…

八款最佳的远程桌面工具

八款最佳的远程桌面工具 作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs 远程桌面是微软公司为了方便网络管理员管理维护服务器而推出的一项服务。从windows 2000 server版本开始引入,网络管理员使用远程桌面连接程…

推荐5款Windows桌面效率工具

今天我想分享一些自己比较喜欢的桌面端软件,还请大家包涵指正。如果你曾搜索过 Windows 效率工具推荐,对下文的软件或许有所了解。不过为了凑字数,我还是会再介绍一遍。 1.文件定位——Listary Listary 是我使用频率最高的软件之一&#xf…

使用鲁棒优化的定价策略进行微电网不平衡管理研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

硬盘 : ATA、ATAPI的含义

ATA和ATAPI是广为使用的IDE和EIDE设备的相关标准。ATA是AT Attachment的缩写,意思是AT计算机上的附加设备(还记得IBM PC/AT吗?)。ATA可以使用户方便地在PC机上连接硬盘,但有时这样还不够。有些用户需要通过同样方便的手段连接CDRO…

Bios工程师手边事—SATA

前言:诫命是是灯,法则是光,训诲的责备是生命的道。 作为计算机,除了运算能力,还要求有存储能力。就像一个人一样,有逻辑思维能力还不行,还需要有上佳的记忆能力。只有这样,才能凭着人…