iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Software Development

軟體開發養成計畫:以小程式實作深化開發能力系列 第 7

[Day7]一週小程式回顧 + GUI 入門/包裝

  • 分享至 

  • xImage
  •  

第一週回顧

這一週我總共寫了六篇文章:

  • 第一天:開場介紹與軟體開發流程模型
  • 第二天:選擇程式開發工具
  • 第三天:用 Java 寫第一個小程式──計算機
  • 第四天:分享 Python 基礎模組與開發環境
  • 第五天:用 Python 寫第二個小程式──字數統計工具
  • 第六天:用 Python 寫第三個小程式──抽籤程式

這六天的文章中,三篇偏技術性,三篇偏實作性。
在這些小程式的開發過程中,我發現雖然一開始的純文字介面功能完整,但缺乏互動性,介面過於單調乏味。因此,今天我打算稍微改造我的小程式,使用 GUI 視覺化界面提升使用體驗,並將它們打包成 exe 檔。
這樣一來,之後使用時就能像開啟 App 一樣直接啟動,讓小程式更像真正的工具,而不只是單純的程式碼。

為什麼要學GUI?

在釐清這個問題前我們先來看看CLI、GUI的差別是甚麼:

文字模式(CLI)

CLI 的全名是 Command-Line Interface,這種模式沒有圖案,一切操作都靠輸入文字指令來完成。
用貼近生活的方式來解釋:如果我們想要打開手機相簿,就需要用鍵盤打出類似 open photos 這樣的指令,然後按下 Enter 鍵;如果想刪除一張照片,可能需要打出 delete photo_name.jpg 這樣的精準指令。
整個過程都是透過鍵盤輸入文字來和電腦溝通
優點是可以只利用一個指令進行重複執行或同時處理大量檔案,也比較節省資源

圖形介面(GUI)

GUI 的全名是 Graphical User Interface。簡單來說,它就是我們最熟悉的、充滿圖案和按鈕的模式。
與上一個情境相同,如果想要打開相簿,我們直接點一下圖示,圖片就出現了;如果想要刪除一張照片,我們只需按住它,然後拖到垃圾桶的圖示。
整個過程都是用眼睛看,用滑鼠或手指點擊來完成的。
優點是直覺好上手,都是視覺化的視窗、圖示、選單,操作非常明確,日常處理事務很方便。

CLI vs GUI

特性 圖形介面 (GUI) 文字模式 (CLI)
互動方式 滑鼠、觸控、圖示 鍵盤、文字指令
操作對象 圖片、視窗、按鈕 文字、指令
優點 直覺、易上手 快速、精準、高效率
適合對象 一般使用者、日常事務 程式設計師、系統管理員、需要處理大量複雜任務的人

現在來回答剛剛的問題,學習 GUI 是因為它是目前最普及、最直覺的電腦操作方式,讓我們輕鬆應對各種日常任務,而且其實,GUI 和 CLI 並不是互相衝突的,它們更像是兩種不同的工具,能各自在不同的場合發揮最大的作用。

小程式的 GUI 包裝

常見的Python GUI工具有:

  • Tkinter → Python 內建,適合新手快速上手。
  • PyQt / PySide → 功能強大,設計感佳,適合進階。
    那我們這次會先使用Thinter做示範,未來有機會再挑戰PyQt。

字數統計工具加上GUI

建立主視窗

window = tk.Tk()
window.title("字數統計小程式")
window.geometry("550x500")
window.configure(bg="#f0f4f7")
  • tk.Tk():建立一個主視窗。
  • title():設定視窗標題。
  • geometry("550x500"):設定視窗大小(寬 550、高 500)。
  • configure(bg="#f0f4f7"):設定背景顏色(淺灰藍)。

文字輸入區

text_area = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=60, height=10,
                                      font=("Microsoft JhengHei", 11), bg="#ffffff", fg="#000000")
text_area.pack(pady=10)
  • ScrolledText:一個帶捲軸的多行文字框,讓使用者輸入文章或段落。
  • wrap=tk.WORD:自動換行在單字邊界。
  • width, height:控制輸入框大小。
  • font、bg、fg:設定字體與顏色。

功能按鈕

analyze_button = tk.Button(window, text="開始分析", command=analyze_text,
                           font=("Microsoft JhengHei", 12, "bold"),
                           bg="#4CAF50", fg="white", padx=10, pady=5, relief="raised")
analyze_button.pack(pady=10)
  • Button:按鈕元件。
  • text:按鈕上的文字。
  • command=analyze_text:當按鈕被點擊時,會執行 analyze_text() 這個函式。
  • bg / fg:按鈕顏色。
  • relief="raised":有立體感的按鈕效果。

結果顯示區

result_area = scrolledtext.ScrolledText(window, wrap=tk.WORD, width=60, height=10,
                                        font=("Microsoft JhengHei", 11), bg="#ffffff", fg="#333366", state="disabled")
result_area.pack(pady=10)
  • state="disabled":預設為「不能輸入」,只用來看結果。
  • 透過** result_area.config(state="normal") **可以開放修改,再寫入文字,最後再設回 disabled。

加上GUI的前後對比

前:
15
後:
16

抽籤程式加上GUI

視窗與基本設定

root = tk.Tk()
root.title("抽籤小程式")
root.geometry("500x400")
root.resizable(False, False)
  • Tk():建立主視窗。
  • title():設定視窗標題。
  • geometry():設定視窗大小。
  • resizable():禁止拉伸,固定大小。

輸入與選擇區域

entry_candidates = tk.Entry(root, width=40)
entry_num = tk.Entry(root, width=5)
repeat_var = tk.BooleanVar()
chk_repeat = tk.Checkbutton(root, text="允許重複", variable=repeat_var)
  • Entry:輸入框(候選人、抽幾個)。
  • BooleanVar + Checkbutton:勾選框,用來控制「是否允許重複」。

按鈕操作

btn_start = tk.Button(root, text="開始抽籤", command=start_lottery)
  • Button:建立按鈕,點擊會執行 start_lottery(),把「原本 CLI 的 input → 改成按鈕觸發」。

動畫與結果顯示

label_result = tk.Label(root, text="", font=("Microsoft JhengHei", 16), fg="blue")
  • Label:顯示「抽獎中...」、「結果」。
  • 動畫效果:用 after() 模擬滾動,顯示隨機名字。

加上GUI的前後對比

前:
17
後:
18


這次把字數統計工具和抽籤程式改成了 GUI 版本,最大的體會就是互動性大幅提升。不再需要在黑底又單調的終端機輸入,而是透過輸入框、按鈕與結果區來操作。
使用 Tkinter 的好處在於能快速建立視窗介面,從標題、背景顏色到字體設計,都能讓小程式更有「App 感」。雖然程式碼比文字介面稍微多了一些,但過程中學會了如何以視覺化方式呈現結果,讓我覺得更有趣,也更有成就感。未來我也希望嘗試更多元的 GUI 元件,讓小程式的操作體驗更完整、更貼近真正的應用工具~


上一篇
[Day6]Python 新手練功:用 random 打造抽籤程式
系列文
軟體開發養成計畫:以小程式實作深化開發能力7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言