利用tkinter函數構造MD5加密的可視化操作界面

GitHub文檔地址:
https://github.com/gao7025/auto_entry_md5.git

引言

利用tkinter構造一個圖形界面的創建函數,主要實現了文件選擇、MD5加密處理、結果預覽和下載等功能。下面是主要涉及的功能模塊:主框架、文件選擇部分、MD5加密部分、結果預覽部分、下載功能和狀態欄等功能。

  1. 支持CSV、Excel和文本文件的上傳
  2. 可以同時選擇多個列進行MD5加密
  3. 加密過程在后臺線程中進行,不會阻塞界面
  4. 顯示加密結果的預覽信息
  5. 將加密結果導出為Excel文件

1. 創建界面組件
    def create_widgets(self):# 創建主框架main_frame = ttk.Frame(self.root, padding="20")main_frame.pack(fill=tk.BOTH, expand=True)# 文件選擇部分file_frame = ttk.LabelFrame(main_frame, text="文件選擇", padding="10")file_frame.pack(fill=tk.X, pady=(0, 10))ttk.Label(file_frame, text="選擇文件:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)self.file_path_var = tk.StringVar()ttk.Entry(file_frame, textvariable=self.file_path_var, width=50).grid(row=0, column=1, padx=5, pady=5)ttk.Button(file_frame, text="瀏覽...", command=self.browse_file).grid(row=0, column=2, padx=5, pady=5)ttk.Button(file_frame, text="上傳文件", command=self.load_file).grid(row=0, column=3, padx=5, pady=5)# 進度條self.progress_var = tk.DoubleVar()self.progress_bar = ttk.Progressbar(file_frame, variable=self.progress_var, maximum=100, length=300)self.progress_bar.grid(row=1, column=0, columnspan=4, padx=5, pady=5, sticky=tk.W+tk.E)# MD5加密部分md5_frame = ttk.LabelFrame(main_frame, text="MD5加密處理", padding="10")md5_frame.pack(fill=tk.X, pady=(0, 10))ttk.Label(md5_frame, text="選擇要加密的列:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)# 創建一個帶滾動條的列表框用于多選列listbox_frame = ttk.Frame(md5_frame)listbox_frame.grid(row=0, column=1, padx=5, pady=5, sticky=tk.W+tk.E)self.columns_listbox = tk.Listbox(listbox_frame, selectmode=tk.MULTIPLE, width=30, height=5)self.columns_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)scrollbar = ttk.Scrollbar(listbox_frame, orient=tk.VERTICAL, command=self.columns_listbox.yview)scrollbar.pack(side=tk.RIGHT, fill=tk.Y)self.columns_listbox.config(yscrollcommand=scrollbar.set)self.encrypt_btn = ttk.Button(md5_frame, text="加密所選列", command=self.encrypt_columns, state=tk.DISABLED)self.encrypt_btn.grid(row=0, column=2, padx=5, pady=5)# 結果預覽部分results_frame = ttk.LabelFrame(main_frame, text="結果預覽", padding="10")results_frame.pack(fill=tk.BOTH, expand=True, pady=(0, 10))# 創建一個帶滾動條的文本區域text_frame = ttk.Frame(results_frame)text_frame.pack(fill=tk.BOTH, expand=True)self.result_text = tk.Text(text_frame, wrap=tk.WORD, height=10)self.result_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)scrollbar = ttk.Scrollbar(text_frame, command=self.result_text.yview)scrollbar.pack(side=tk.RIGHT, fill=tk.Y)self.result_text.config(yscrollcommand=scrollbar.set)# 下載按鈕self.download_btn = ttk.Button(main_frame, text="下載加密結果", command=self.download_results, state=tk.DISABLED)self.download_btn.pack(pady=10)# 狀態欄self.status_var = tk.StringVar()self.status_var.set("就緒")status_bar = ttk.Label(self.root, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)status_bar.pack(side=tk.BOTTOM, fill=tk.X)
2. 打開文件瀏覽器選擇文件,加載并顯示文件內容
    def browse_file(self):file_path = filedialog.askopenfilename(filetypes=[("CSV文件", "*.csv"), ("Excel文件", "*.xlsx;*.xls"), ("文本文件", "*.txt"),("所有文件", "*.*")])if file_path:self.file_path_var.set(file_path)self.file_path = file_pathdef load_file(self):if not self.file_path:messagebox.showerror("錯誤", "請先選擇一個文件")return# 清空結果文本區域和列表框self.result_text.delete(1.0, tk.END)self.columns_listbox.delete(0, tk.END)self.encrypted_data = None# 更新狀態欄和啟用進度條self.status_var.set("正在加載文件...")self.progress_var.set(0)self.progress_bar.start()# 在單獨的線程中執行加載,避免界面卡頓load_thread = threading.Thread(target=self._perform_load)load_thread.daemon = Trueload_thread.start()def _perform_load(self):try:# 讀取文件file_ext = os.path.splitext(self.file_path)[1].lower()if file_ext == '.csv':self.data = pd.read_csv(self.file_path)elif file_ext in ['.xlsx', '.xls']:self.data = pd.read_excel(self.file_path)elif file_ext == '.txt':# 嘗試檢測分隔符with open(self.file_path, 'r') as f:first_line = f.readline()if '\t' in first_line:self.data = pd.read_csv(self.file_path, sep='\t')elif ',' in first_line:self.data = pd.read_csv(self.file_path, sep=',')else:self.data = pd.read_csv(self.file_path, sep=None, engine='python')else:# 嘗試用 pandas 讀取其他格式try:self.data = pd.read_csv(self.file_path)except Exception as e:self.update_ui(lambda: messagebox.showerror("錯誤", f"不支持的文件格式: {e}"))self.update_ui(lambda: self.status_var.set("就緒"))self.update_ui(lambda: self.progress_bar.stop())return# 更新進度self.update_ui(lambda: self.progress_var.set(50))self.update_ui(lambda: self.status_var.set("正在準備預覽..."))# 更新列選擇列表框self.update_ui(self.update_columns_listbox)# 顯示數據預覽self.update_ui(self.display_data_preview)# 啟用加密按鈕self.update_ui(lambda: self.encrypt_btn.config(state=tk.NORMAL))# 完成self.update_ui(lambda: self.progress_var.set(100))self.update_ui(lambda: self.progress_bar.stop())self.update_ui(lambda: self.status_var.set("文件加載完成"))except Exception as e:# 顯示錯誤信息并記錄日志error_msg = f"加載文件時出錯: {str(e)}"self.update_ui(lambda: messagebox.showerror("錯誤", error_msg))self.update_ui(lambda: self.progress_bar.stop())self.update_ui(lambda: self.status_var.set("加載失敗"))log_error(type(e), e, e.__traceback__)
3.對選中的列進行MD5加密
    def encrypt_columns(self):if self.data is None or self.data.empty:messagebox.showerror("錯誤", "沒有數據可加密")return# 獲取所有選中的列selected_indices = self.columns_listbox.curselection()if not selected_indices:messagebox.showerror("錯誤", "請選擇至少一個列進行加密")return# 提取選中的列名(去除類型標記)selected_columns = []for i in selected_indices:col_text = self.columns_listbox.get(i)# 如果列名包含類型標記,則提取原始列名if '(' in col_text and ')' in col_text:col_name = col_text.split('(')[0].strip()else:col_name = col_textselected_columns.append(col_name)# 檢查選中的列是否存在于數據中invalid_cols = [col for col in selected_columns if col not in self.data.columns]if invalid_cols:messagebox.showerror("錯誤", f"選中的列不存在: {', '.join(invalid_cols)}")return# 更新狀態欄self.status_var.set("正在加密數據...")self.progress_var.set(0)self.progress_bar.start()# 在單獨的線程中執行加密,避免界面卡頓encryption_thread = threading.Thread(target=self._perform_encryption, args=(selected_columns,))encryption_thread.daemon = Trueencryption_thread.start()def _perform_encryption(self, selected_columns):try:# 創建數據副本self.encrypted_data = self.data.copy()# 對每列進行加密total_cols = len(selected_columns)for i, col in enumerate(selected_columns):# 更新進度progress = (i / total_cols) * 100self.update_ui(lambda p=progress: self.progress_var.set(p))# 創建新列名new_col = f"{col}_md5"# 對每一行進行MD5加密# 先將列轉換為字符串類型self.encrypted_data[new_col] = self.data[col].astype(str).apply(lambda x: self._md5_encrypt(x) if pd.notna(x) else x)# 顯示加密結果預覽self.update_ui(self.display_encrypted_preview)# 啟用下載按鈕self.update_ui(lambda: self.download_btn.config(state=tk.NORMAL))# 完成self.update_ui(lambda: self.progress_var.set(100))self.update_ui(lambda: self.progress_bar.stop())self.update_ui(lambda: self.status_var.set("加密完成"))messagebox.showinfo("成功", f"已對選中的 {total_cols} 列進行MD5加密")except Exception as e:error_msg = f"加密過程中出錯: {str(e)}"self.update_ui(lambda: messagebox.showerror("錯誤", error_msg))self.update_ui(lambda: self.progress_bar.stop())self.update_ui(lambda: self.status_var.set("加密失敗"))log_error(type(e), e, e.__traceback__)def _md5_encrypt(self, text):return hashlib.md5(text.encode('utf-8')).hexdigest()
4.通過pyinstaller函數對文件進行exe打包
pyinstaller -w --onedir --hidden-import pandas --hidden-import openpyxl md5_encryption_tool.py

參數說明:

-w 或 --windowed:不顯示命令行窗口(適合 GUI 應用)
-F 或 --onefile:打包成單個可執行的exe文件
–onedir 打包成包含所有依賴的文件夾(而不是單個exe文件)
–hidden-import:指定需要包含的隱藏依賴

在這里插入圖片描述

結果展示

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84047.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84047.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ICEM CFD網格生成 | 基本概念與界面工具

基本概念◆ 名稱定義 網格:網格是空間離散的單元,用于如下數值仿真 結構 流體 電磁 其他 單元 0D – 節點單元 質量點 約束,加載位置 1D –線單元 Bars, beams, rods, springs 2D 網格邊界 2D – 表面/殼單元 - 四邊形 - 三角…

簡化您的工作流程:在 Azure 中構建高效的邏輯應用程序

簡介 在當今的數字化環境中,自動化工作流程和服務集成對于追求效率和敏捷性的企業至關重要。Azure Logic Apps 使開發人員和 IT 專業人員能夠創建集成應用、數據、服務和系統的自動化工作流程。在本文中,我們將逐步講解使用 Azure 門戶創建 Logic Apps 的過程,并通過演示來說…

AI 技術落地實戰:開發流程優化、行業場景重塑與前沿應用洞察

在人工智能技術如火如荼發展的當下,AI 工具、大模型以及它們在各行業的應用,正以前所未有的態勢重塑著開發者的工作模式和各領域的發展格局。從智能編碼助手讓編程變得高效便捷,到自動化測試平臺提升軟件質量,從大模型在垂直行業的…

文本生成AI+圖像識別:電商詳情頁信息提取實戰

行業問題:傳統采集難以應對“圖文視頻化”的電商信息 在電商平臺不斷“視頻化”的趨勢下,傳統的網頁采集手段正逐漸失效。以抖音為例,商品信息已不僅限于圖文詳情,而是通過短視頻、圖像混排、語音解說等形式呈現。商品的名稱、優…

linux權限基礎

權限的概念 linux中,權限是用于控制【用戶】對 【文件】進行操作控制的工具。用戶權限文件權限 用戶權限 用戶 用戶組:具有相同特性的用戶的集合體。 文件權限 linux中,一切皆文件,包括普通文件,目錄,文件…

讓C++處理JSON類型配置文件更輕松-Hjson-cpp詳解

讓C處理JSON類型配置文件更輕松-Hjson-cpp詳解 一、Hjson-Cpp簡介Hjson-Cpp簡介核心特性安裝與集成基本用法示例常用API說明與JSON互轉錯誤處理性能建議高級特性1. 類型安全訪問2. 文件操作3. 自定義解析規則 二、使用教程下載使用 一、Hjson-Cpp簡介 Hjson-Cpp簡介 Hjson-Cp…

單例模式的好處

為什么要使用單例模式 1.資源管理: 唯一性:某些資源在整個應用程序中只需要一個實例,例如日志記錄器、配置管理器、數據庫連接池等。單例模式可以確保這些資源的唯一性,避免重復創建和管理。 全局訪問:單例模式提供了…

LangChain 結構化輸出指南

LangChain 結構化輸出指南 概述 對于許多應用程序(如聊天機器人),模型需要直接用自然語言回應用戶。然而,在某些場景下,我們需要模型以結構化格式輸出。例如,我們可能希望將模型輸出存儲在數據庫中&#…

探究webView與html的通訊

最近出來個新需求: 需求描述: 將uniapp的代碼打包成一個app,并實現原本的功能。 原uniapp是一個H5項目,主要的步驟流程是上傳用戶的身份證進行二要素認證,成功后再進行三方活體認證,然后三方回跳到項目中的…

高級定時器TIM1、TIM8

高級定時器在通用定時器的基礎上增加了一些功能,如:重復計數器、帶死區控制的互補輸出通道、斷路輸入等。 捕獲/比較通道的輸出部分(通道1至3) 捕獲/比較通道的輸出部分(通道4) ①重復計數器RCR 基本和通用定時器發生溢出時,會直接生成更新時…

搭建簡易采購系統:從需求分析到供應商數據庫設計

一、需求分析框架(4大核心模塊) 關鍵需求清單: 需求提報(含審批流) 供應商準入與評估 比價與訂單生成 基礎報表功能 二、技術選型方案 組件推薦方案替代方案前端框架Vue.js ElementUIReact Ant Design后端語言P…

基于LSTM-GARCH混合模型的“獲利了結”量化解析:黃金單日1.27%跌幅的技術性歸因

摘要:本文通過多維度量化指標、結合地緣風險溢價因子、貨幣政策預期指數及貿易摩擦不確定性指數,構建動態情景分析框架。 一、黃金價格技術面解析 周一(6月16日)現貨黃金呈現"沖高回落-獲利了結"典型特征,日…

【AI】Spring AI Alibaba 的介紹

目錄 一、Spring AI Alibaba 的介紹 1.1 什么是 Spring AI Alibaba? 1.2 Spring AI 項目簡介 二、核心概念 2.1 模型 2.2 提示(Prompt) 2.3 提示詞模板(Prompt Template) 2.4 嵌入(Embedding&#x…

從main()函數的執行發散開來

大多數程序員的第一行代碼可能都是從輸出“Hello&#xff0c;World!開始的吧。如果請你寫一個c程序&#xff0c;在屏幕上打印“Hello&#xff0c;World!”&#xff0c;下面的代碼對擁有扎實編程基本功的你而言肯定so easy&#xff1a; #include <stdio.h>int main() {pr…

(16)java+ selenium->自動化測試-元素定位之By xpath下篇

1.簡介 老規矩,我們還是接著前面兩篇的Xpath 5.自動測試實戰 以百度首頁為例,將xpath的各種定位方法一一講解和分享一下。 5.1大致步驟 1.訪問百度首頁。 2.通過xpath定位到元素,點擊一下。 5.2模糊定位starts-with關鍵字 有一種特殊的情況:頁面元素的屬性值會被動態…

45-Oracle 索引的新建與重建

小伙們日常里有沒有被業務和BOSS要求新建索引或是重建索引&#xff1f;他們都想著既快又穩&#xff0c;那么索引在在Oracle上如何實現、新建、重建。原則是什么&#xff1a; 1、新建索引&#xff0c;查詢是否高頻且慢&#xff0c;索引列是否高選擇性&#xff0c;新增索引對寫負…

使用 Rust Clippy 的詳細方案

使用 Rust Clippy 的詳細方案 Rust Clippy 是一個強大的靜態分析工具&#xff0c;幫助開發者識別代碼中的潛在問題并改善代碼質量。以下是如何充分利用 Clippy 的方法&#xff1a; 安裝 Clippy 確保 Rust 工具鏈已安裝。通過以下命令安裝 Clippy&#xff1a; rustup compon…

21.什么是JSBridge(1)

1.Native與H5交互的常用交互機制&#xff0c;主流選擇是jsbridge 2.jsbridge是什么&#xff1f; JSBridge 是 Android 官方 WebView 提供的 addJavascriptInterface() 能力 項目方&#xff08;或三方庫&#xff09;封裝的橋梁通信協議。 底層機制由 Android 官方 WebView 提…

什么是Flink

Apache Flink&#xff1a;流批一體的大數據處理引擎 什么是Apache Flink&#xff1f; Apache Flink是一個開源的分布式流處理框架&#xff0c;最初由柏林工業大學開發&#xff0c;后成為Apache軟件基金會的頂級項目。它能夠以高吞吐、低延遲的方式處理無界數據流(流處理)和有…

區塊鏈+智能合約如何解決上門按摩行業的信任問題?——App開發案例

你是不是覺得上門按摩市場已經人滿為患&#xff1f;擔心自己入局太晚或者缺乏行業經驗&#xff1f;一組真實數據可能會讓你改變看法&#xff1a;全國按摩服務需求正以月均8%的速度迅猛增長&#xff0c;但專業技師的供給量僅能跟上5%的增幅&#xff01;這意味著每個月都有相當于…