【Python Tkinter】圖形用戶界面(GUI)開發及打包EXE指南

【Python Tkinter】圖形用戶界面(GUI)開發及打包EXE指南

  • 一、關于 Python Tkinter
  • 二、密碼生成器示例
    • 2.1 使用Python添加圖形用戶界面(GUI)
    • 2.2 使用工具PyInstaller將應用打包成exe文件
  • 三、總結

一、關于 Python Tkinter

Python Tkinter 是 Python 的標準 GUI(圖形用戶界面)庫,它提供了一個簡單、高效的方式來創建桌面應用程序的圖形界面。作為 Python 內置的標準庫的一部分,Tkinter 無需額外安裝即可使用,并且具有跨平臺特性,可以在 Windows、macOS 和 Linux 等操作系統上運行。Tkinter 基于 Tcl/Tk GUI 工具包開發,提供了豐富的控件(如按鈕、標簽、文本框等)和靈活的布局管理工具,適合快速開發中小型桌面應用程序。

在這里插入圖片描述

核心特性

  1. 簡單易用:Tkinter 的 API 設計直觀,學習曲線平緩,非常適合初學者入門 GUI 編程。其語法簡潔,能夠通過少量代碼快速構建功能完整的界面。
  2. 跨平臺支持:Tkinter 應用程序可以在多種操作系統上運行,無需修改代碼,確保了開發的可移植性。
  3. 豐富的控件庫:Tkinter 提供了多種常用控件,包括:
    • Label:用于顯示文本或圖像。
    • Button:可點擊的按鈕,用于觸發操作。
    • Entry:單行文本輸入框。
    • Text:多行文本輸入和顯示區域。
    • CheckbuttonRadiobutton:用于創建復選框和單選按鈕。
    • Listbox:顯示列表項。
    • Canvas:用于繪制圖形和圖像。
    • Menu:創建菜單欄。
    • Frame:作為容器來組織其他控件。
  4. 布局管理:Tkinter 提供了三種主要的布局管理器來控制控件在窗口中的位置和大小。
  5. 事件處理:Tkinter 采用事件驅動模型,可以響應用戶的交互操作,如鼠標點擊、鍵盤輸入等。事件可以通過 command 參數(用于按鈕等簡單控件)或 bind() 方法(通用事件綁定)與回調函數關聯。
  6. 變量類:Tkinter 提供了 StringVarIntVarDoubleVarBooleanVar 等變量類,用于自動同步 Python 變量與控件(如 Entry、Label)的值,簡化了數據的獲取和更新。

優缺點

優點:無需安裝,作為 Python 標準庫的一部分開箱即用。學習成本低,適合快速原型開發和小型應用。跨平臺兼容性好。缺點:默認界面風格較為簡單,美觀度不如一些第三方 GUI 庫(如 PyQt、wxPython)。功能相對基礎,對于開發大型復雜應用程序可能略顯不足。

應用場景

Tkinter 非常適合開發簡易功能類型的應用程序,如小型工具:如文件處理器、數據格式轉換器。教學演示:用于編程教學和概念驗證。簡單的數據輸入/顯示界面:如數據庫前端、配置工具。原型開發:快速構建應用程序的初始界面。

二、密碼生成器示例

Windows 密碼生成器應用功能:輸入設備ID號通過加密算法得到6位數字密碼

2.1 使用Python添加圖形用戶界面(GUI)

創建一個新的Python文件,命名為 password_generator_gui.py,實現加密算法的核心功能,并創建帶界面的應用

import tkinter as tk
from tkinter import messagebox
import hmac
import hashlib
import sys# !!! 重要 !!!
SECRET_KEY = "Your_Unique_And_Secret_Key_Here"def generate_password(device_id: str, secret_key: str) -> str:"""根據設備ID和密鑰生成6位密碼,這個核心加密邏輯保持不變。"""try:key_bytes = secret_key.encode('utf-8')data_bytes = device_id.encode('utf-8')hash_bytes = hmac.new(key_bytes, data_bytes, hashlib.sha256).digest()offset_bytes = hash_bytes[-4:]truncated_hash = int.from_bytes(offset_bytes, 'big')positive_hash = truncated_hash & 0x7FFFFFFFsix_digit_number = positive_hash % 1000000return f'{six_digit_number:06d}'except Exception as e:# 如果發生錯誤,通過messagebox顯示messagebox.showerror("加密錯誤", f"發生了一個錯誤: {e}")return None# --- GUI部分 ---def on_generate_click():"""當用戶點擊“生成密碼”按鈕時執行此函數。"""# 1. 從輸入框獲取設備IDdevice_id = entry_id.get()if not device_id:messagebox.showwarning("輸入為空", "請輸入設備ID!")return# 2. 調用核心函數生成密碼password = generate_password(device_id, SECRET_KEY)# 3. 將生成的密碼顯示在輸出框中if password:# 先讓輸出框變為可寫狀態entry_password.config(state='normal')# 清空上一次的結果entry_password.delete(0, tk.END)# 插入新密碼entry_password.insert(0, password)# 再次將輸出框設為只讀entry_password.config(state='readonly')# --- 創建主窗口 ---
if __name__ == "__main__":# 初始化主窗口root = tk.Tk()root.title("密碼生成器")root.geometry("400x200") # 設置窗口大小# 創建一個主框架用于布局main_frame = tk.Frame(root, padx=15, pady=15)main_frame.pack(expand=True, fill=tk.BOTH)# 創建控件label_id = tk.Label(main_frame, text="設備ID (Device ID):", font=("Arial", 12))entry_id = tk.Entry(main_frame, font=("Arial", 12), width=35)generate_button = tk.Button(main_frame, text="生成6位密碼", font=("Arial", 12, "bold"), command=on_generate_click)label_password = tk.Label(main_frame, text="生成的密碼:", font=("Arial", 12))# 將密碼輸出框設為只讀,方便用戶復制entry_password = tk.Entry(main_frame, font=("Arial", 14, "bold"), state='readonly', readonlybackground='white', fg='blue', justify='center')# 使用 pack 布局控件label_id.pack(pady=(0, 5))entry_id.pack(pady=5, ipady=4) # ipady增加內部高度generate_button.pack(pady=10)label_password.pack(pady=5)entry_password.pack(pady=5, ipady=4)# 啟動GUI事件循環root.mainloop()

在保存好代碼后,你可以直接在 Pycharm 運行或者執行以下命令運行這個Python腳本來測試界面是否正常工作:

python password_generator_gui.py

如果一切正常,你會看到一個窗口彈出。你可以在里面輸入設備ID,點擊按鈕,然后看到生成的密碼。

在這里插入圖片描述

2.2 使用工具PyInstaller將應用打包成exe文件

確認GUI應用可以正常運行后,就可以使用PyInstaller工具將這個帶界面的Python應用打包成一個獨立的.exe可執行文件。

安裝pyinstaller庫(需要電腦有Python環境):

pip install pyinstaller

進入 password_generator_gui.py 文件所在的文件夾,在地址欄輸入 cmd 然后按回車,這樣就會在該目錄下打開命令行,執行以下命令:

pyinstaller --name "PasswordGenerator" --onefile --windowed --icon="path/to/your/icon.ico" password_generator_gui.py

參數解析:

  • --name "PasswordGenerator": 指定生成的.exe文件的名字為PasswordGenerator.exe
  • --onefile: 這是最重要的參數之一。它會將所有依賴項打包到一個單獨的.exe文件中,非常方便分發。如果不加這個參數,會生成一個包含很多文件的文件夾。
  • --windowed-w: 這個參數必須要有!它告訴PyInstaller這是一個GUI應用,運行時不要彈出黑色的命令行控制臺窗口。
  • --icon="path/to/your/icon.ico": (可選)為你的.exe文件指定一個自定義圖標。你需要提供一個.ico格式的圖標文件路徑。你可以從網上搜索“free ico converter”來制作自己的圖標文件。如果不需要圖標,可以刪除這個參數。
  • password_generator_gui.py: 你要打包的主Python腳本文件。

當然執行最簡單的命令即可:

pyinstaller --onefile --windowed password_generator_gui.py```

PyInstaller 會開始分析你的腳本,收集所有依賴,然后進行打包。這個過程可能會持續幾十秒到幾分鐘。當你在命令行看到 Building EXE from EXE-00.toc completed successfully. 時,就表示打包完成了。

在這里插入圖片描述

打包完成后,生成的 exe 文件就在 dist 文件夾里,你能找到 PasswordGenerator.exe (或者你用--name指定的名字)。現在就可以雙擊運行它,它就是一個完全獨立的Windows程序了,可以拷貝到任何沒有安裝Python的Windows電腦上運行。

三、總結

Python Tkinter 是一個功能完備且易于上手的 GUI 工具包,盡管它在界面美觀度和功能豐富性上可能不如一些高級框架,但其便捷性和內置特性使其成為 Python 開發者進行桌面應用開發的一個實用選擇,尤其適合初學者和需要快速實現圖形界面的項目。

相關參考:
https://tkinter.com/
https://docs.python.org/zh-cn/3/library/tkinter.html

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

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

相關文章

【設計模式】【觀察者模式】實例

一對多的統一監聽 —— 這就是 觀察者模式(Observer Pattern) 的經典應用場景。也就是說:一個事件源(Subject) → 可以注冊多個監聽器(Observers);當事件發生時,一次性通…

C#測試調用OpenXml操作word文檔的基本用法

OpenXML SDK是微軟為高效處理Office文檔(如Word、Excel)而開發的開源.NET庫,它直接操作文檔內部的XML結構,無需安裝Office軟件即可實現文檔的創建、讀取和編輯,常用于服務器端批量生成報表、自動化文檔處理等場景,輕量且跨平臺。本…

照度傳感器考慮筆記

您好!很高興為您解答關于照度計傳感器和設計的問題。這是一個非常專業且實際的話題。 一、照度計常用的照度傳感器類型 照度計的核心是光電探測器,其工作原理是將光信號轉換為電信號。目前主流的照度傳感器都屬于硅光電二極管(Si Photodiode&…

C# Web API Mapster基本使用

安裝包&#xff1a;Mapster1.注冊MyRegister.Scan(); // 全局配置 //builder.Services.AddMapster(); // 需要安裝Mapster.DependencyInjection包 builder.Services.AddScoped<IMapper,Mapper>();2.配置&#xff08;可不進行配置直接使用也行&#xff09;public class My…

<數據集>無人機航拍人員搜救識別數據集<目標檢測>

數據集下載鏈接https://download.csdn.net/download/qq_53332949/91899456數據集格式&#xff1a;VOCYOLO格式 圖片數量&#xff1a;5755張 標注數量(xml文件個數)&#xff1a;5755 標注數量(txt文件個數)&#xff1a;5755 標注類別數&#xff1a;1 標注類別名稱&#xff…

STM32 開發(三十三)STM32F103 片內資源 —— 直接存儲 DMA 實戰 編碼詳解

??《上一篇》 ???《主目錄》 ???《下一篇》 文章目錄 一、基礎知識點 二、開發環境 三、STM32CubeMX相關配置 四、Vscode 代碼講解 ADC -DMA 采集溫度值 代碼解析 DAC -DMA 輸出 1KHZ 正弦波 代碼解析 五、結果演示 ADC -DMA 采集溫度值 結果演示 DAC -DMA 輸出 1KHZ 正…

Ip 地址,子網掩碼

1. 什么是 IP 地址&#xff1f;IP 地址是互聯網上設備的唯一標識&#xff0c;類似于現實中的“門牌號”&#xff0c;用于設備之間的通信。ABC類IP內網地址的范圍如下&#xff1a;A類地址&#xff1a;范圍是 10.0.0.0 到 10.255.255.255&#xff0c;用于大型網絡&#xff0c;網絡…

軟件工程領域內容運營的翻譯策略:打破語言邊界

軟件工程領域內容運營的翻譯策略:打破語言邊界 關鍵詞:軟件工程、內容運營、翻譯策略、技術本地化、術語管理、跨文化溝通、機器翻譯 摘要:在全球化協作日益緊密的今天,軟件工程領域的內容(如技術文檔、API手冊、開發者博客、開源社區指南等)早已突破單一語言限制,成為連…

元宇宙與金融創新:虛實融合下的金融服務新形態

1 元宇宙重構金融核心服務場景1.1 零售金融場景&#xff1a;從 “線下網點 線上 APP” 到 “沉浸式虛擬金融空間”傳統零售金融服務受限于物理網點或二維 APP&#xff0c;交互性與體驗感不足&#xff0c;元宇宙通過 “3D 虛擬金融空間 數字分身交互”&#xff0c;打造 “身臨…

信奧賽csp初賽高頻考點真題分類解析之:基本運算

信奧賽csp初賽高頻考點真題分類解析之:基本運算 ?題目1: 答案:C 題解:R進制轉換為十進制:按權展開 3 \times 8 1 ^1

PyTorch深度學習實戰【10】之神經網絡的損失函數

文章目錄零 回顧&#xff1a;機器學習中的模型訓練流程一 神經網絡的損失函數1.1 機器學習中的優化思想1.2 回歸&#xff1a;誤差平方和SSE1.3 二分類交叉熵損失的原理與實現1.3.1 極大似然估計求解二分類交叉熵損失1.3.2 實現二類交叉熵損失1.4 多分類交叉熵損失的原理與實現1…

人機協同中的層次映射關系研究:從自然語言處理到智能系統設計

一、引言&#xff1a;人機協同的層次化認知基礎人機協同作為人工智能領域的核心研究方向&#xff0c;正經歷從簡單工具使用到深度智能協作的范式轉變。在這一演進過程中&#xff0c;如何建立人類意圖與機器執行之間的有效映射關系成為關鍵挑戰。自然語言處理(NLP)領域中&#x…

2025主流大模型核心信息

2025主流大模型核心信息國際主流大模型1. GPT-5 (OpenAI)版本特性&#xff1a;多模態能力支持圖像、視頻、音頻的復雜理解與生成&#xff1b;超長上下文處理能力達1M tokens&#xff1b;推理能力接近專家水平優勢&#xff1a;綜合性能領先&#xff0c;編程能力強(SWE-bench Ver…

將容器連接到默認橋接網絡

1.列出當前已有的網絡[roothost1 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE db2f3a6af212 bridge bridge local 4251d9be020b host host local ba96ad98e029 none null local2.啟動兩個 ash &#xff08; Alpine 操作系…

安全審計-Ubuntu防火墻ufw

文章目錄 一、為什么運維需要使用防火墻? 二、Ubuntu 上常用的防火墻工具 三、UFW 常用命令及運維使用示例 1. 安裝 UFW(如果尚未安裝) 2. 查看防火墻狀態 3. 設置默認策略(強烈建議) 4. 允許必要服務(常見運維場景) ? 允許 SSH(遠程管理,最重要!) ? 允許 HTTP / …

iPhone 17系列包含哪些版本,各版本又有哪些配置,硬件、功能、性能、價格詳細介紹

文章目錄版本信息配置信息版本信息 iPhone 17系列提供了四個版本&#xff1a;iPhone 17 (標準版)、iPhone 17 Air、iPhone 17 Pro 和 iPhone 17 Pro Max。它們在設計、性能、影像等方面各有側重&#xff0c;下面是一個快速概覽表格&#xff0c;幫助你直觀了解它們的核心區別&a…

Go模塊自動導入教學文檔

目錄 概述核心概念實現原理項目結構代碼實現高級特性最佳實踐常見問題 概述 Go語言作為一門靜態類型語言&#xff0c;沒有像Python那樣的動態import機制。但是&#xff0c;我們可以通過設計模式和架構設計來實現"自動導入模塊"的功能。這種模式特別適合微服務架構…

深入解析Spring AOP核心原理

一 Spring-AOP1.對SpringAOP理解AOP是OOP的延續&#xff0c;是軟件開發中的一個熱點&#xff0c;也是Spring框架中的一個重要內容&#xff0c;是函數式編程的一種衍生泛型。利用AOP可以對業務邏輯的各個部分進行隔離&#xff0c;從而使得業務邏輯各部分之間的耦合度降低&#x…

大數據與AI:一場“數據盛宴”與“智能大腦”的奇妙邂逅

在當今這個信息爆炸的時代&#xff0c;大數據和AI&#xff08;人工智能&#xff09;就像一對熱戀中的情侶&#xff0c;天天黏在一起&#xff0c;形影不離。它們的結合&#xff0c;不僅改變了我們的生活方式&#xff0c;還讓這個世界變得更加有趣和奇妙。今天&#xff0c;就讓我…

解決window下共享資源報“不允許一個用戶使用一個以上用戶名與服務器或共享資源的多重連接“問題

問題現象&#xff1a; 使用不同samba共享賬號登錄同一服務器ip共享文件夾資源時會報錯誤提示解決辦法&#xff1a; 1.使用net use命令查看已保存的網絡連接 C:\Users\Administrator>net use 會記錄新的網絡連接。狀態 本地 遠程 網絡----…