[Python教學] Tkinter:進階元件與功能 - 豐富應用體驗

更新 發佈閱讀 9 分鐘

嘿,大家好!到目前為止,我們已經能讓視窗動起來,還能抓資料、處理按鈕點擊,感覺有點像回事了吧?不過,單靠標籤、按鈕、輸入框有點單調,今天我們要來玩點進階的東西,像是勾選框、選單、下拉清單這些,讓你的應用更有「專業感」。準備好了嗎?我們這就開始啦!


進階元件:讓介面更活潑

Tkinter 不只有基本款元件,還藏了一些厲害的小工具。我們今天要介紹幾個超實用的,讓你的視窗從小玩具變成大玩具!

1. Checkbutton:勾選框,選或不選

想讓使用者勾選東西?Checkbutton 就是你的好幫手。比如,我們來做個「興趣調查」:

import tkinter as tk

def show_hobbies():
hobbies = []
if var1.get(): hobbies.append("打遊戲")
if var2.get(): hobbies.append("看電影")
label.config(text="你的興趣是:" + "、".join(hobbies))

# 開視窗
window = tk.Tk()
window.title("興趣調查")
window.geometry("300x200")

# 標籤
label = tk.Label(window, text="你的興趣是:")
label.pack(pady=10)

# 勾選框
var1 = tk.BooleanVar() # 用來存勾選狀態
var2 = tk.BooleanVar()
tk.Checkbutton(window, text="打遊戲", variable=var1).pack()
tk.Checkbutton(window, text="看電影", variable=var2).pack()

# 按鈕
tk.Button(window, text="送出", command=show_hobbies).pack(pady=10)

window.mainloop()

跑起來後,勾選你喜歡的,點「送出」,標籤就顯示你的選擇。

raw-image
raw-image


  • BooleanVar():這是 Tkinter 的變數,存 True(勾選)或 False(沒勾)。
  • variable:把勾選框綁到這個變數,狀態就記錄下來了。


2. Radiobutton:單選框,只能選一個

如果是只能選一個的場景(像性別、年級),就用 Radiobutton:

import tkinter as tk

def show_choice():
label.config(text=f"你選的是:{var.get()}")

# 開視窗
window = tk.Tk()
window.title("單選測試")
window.geometry("300x200")

# 標籤
label = tk.Label(window, text="你選的是:")
label.pack(pady=10)

# 單選框
var = tk.StringVar(value="無") # 預設值
tk.Radiobutton(window, text="男生", variable=var, value="男生").pack()
tk.Radiobutton(window, text="女生", variable=var, value="女生").pack()

# 按鈕
tk.Button(window, text="確認", command=show_choice).pack(pady=10)

window.mainloop()

選一個,點「確認」,標籤就告訴你選了啥。

raw-image
raw-image


  • StringVar():這次用字串存選項,value 是每個選項的值。
  • 同一個 var 綁多個 Radiobutton,它們就變成互斥的,只能選一個。


3. Listbox:下拉清單,選多選少都行

想給一堆選項讓人挑?Listbox 超好用,我們來做個「喜歡的水果」清單:

import tkinter as tk

def show_selection():
selected = listbox.get(listbox.curselection()) # 抓選中的項目
label.config(text=f"你選了:{selected}")

# 開視窗
window = tk.Tk()
window.title("水果清單")
window.geometry("300x200")

# 標籤
label = tk.Label(window, text="你選了:")
label.pack(pady=10)

# 清單框
listbox = tk.Listbox(window)
for fruit in ["蘋果", "香蕉", "橘子", "西瓜"]:
listbox.insert(tk.END, fruit)
listbox.pack()

# 按鈕
tk.Button(window, text="選好啦", command=show_selection).pack(pady=10)

window.mainloop()

跑起來,選個水果,點按鈕,標籤就顯示你的選擇。

raw-image
raw-image


  • insert(tk.END, ...):把東西加到清單尾巴。
  • curselection():回傳選中的索引,搭配 get() 抓內容。


功能加分:選單與訊息框

元件有了,還可以加點功能讓應用更完整。

1. Menu:頂端的選單列

每個正經程式都有個選單吧?我們來加一個:

import tkinter as tk

def say_hello():
label.config(text="哈囉啊!")

# 開視窗
window = tk.Tk()
window.title("有選單的視窗")
window.geometry("300x200")

# 標籤
label = tk.Label(window, text="點選單看看")
label.pack(pady=20)

# 選單
menu = tk.Menu(window)
window.config(menu=menu)
file_menu = tk.Menu(menu, tearoff=0) # 子選單
menu.add_cascade(label="檔案", menu=file_menu)
file_menu.add_command(label="說哈囉", command=say_hello)
file_menu.add_separator() # 分隔線
file_menu.add_command(label="結束", command=window.quit)

window.mainloop()

點「檔案」下拉,選「說哈囉」,標籤就變了;選「結束」就關視窗。

raw-image


  • Menu:頂層選單,add_cascade 加子選單,add_command 加選項。


2. Messagebox:跳出小提醒

想跳個視窗提醒使用者?用 tkinter.messagebox:

import tkinter as tk
from tkinter import messagebox

def check_input():
if entry.get() == "":
messagebox.showwarning("警告", "你沒輸入東西啦!")
else:
messagebox.showinfo("成功", "收到你的輸入!")

# 開視窗
window = tk.Tk()
window.title("訊息測試")
window.geometry("300x200")

# 輸入框
entry = tk.Entry(window)
entry.pack(pady=20)

# 按鈕
tk.Button(window, text="檢查", command=check_input).pack()

window.mainloop()

沒輸入就按,跳警告;有輸入就跳成功訊息。

raw-image
raw-image


  • showwarningshowinfo:不同的訊息框樣式,還有 showerror 之類的可以用。


小挑戰:動手做個小工具

來試試吧!做個「早餐點餐機」:

  1. 用 Checkbutton 列出三個早餐選項(像吐司、蛋餅、飯團)。
  2. 加個按鈕,按下去用 messagebox 顯示你選了啥(沒選就提醒)。
  3. 視窗標題設成「早餐點餐機」。

跑跑看,選個早餐試試,感覺自己是不是越來越像程式設計師了?

raw-image



這篇小結

今天我們玩了進階元件,像勾選框、單選框、清單框,還加了選單和訊息框,讓應用更有趣也更實用。怎麼樣,覺得自己的視窗越來越厲害了吧?下次我們要做個實戰專案,把學的都用上,我們下篇見啦!


留言
avatar-img
留言分享你的想法!
avatar-img
追極光的北極熊|軟體工程師的小天地
12會員
163內容數
歡迎來到我的部落格!這裡記錄了軟體工程師的日常生活點滴,並分享程式設計與演算法的實用教學。無論你是初學者還是有經驗的開發者,都能在這裡找到深入淺出的技術解析與實戰技巧。此外,我也會分享工作中的心路歷程與學習心得,讓你不僅學到技術,更能瞭解軟體開發的實際應用與挑戰。希望透過這個平台,能與你共同成長,激發對技術的熱情!
2025/04/28
當我們開發程式時,功能能正常運作固然重要,但在資料量變大或執行時間變長時,效能就成為不可忽視的一環。尤其在 Web 應用、資料分析或科學運算中,程式跑得快與否,直接影響使用者體驗與系統成本。
2025/04/28
當我們開發程式時,功能能正常運作固然重要,但在資料量變大或執行時間變長時,效能就成為不可忽視的一環。尤其在 Web 應用、資料分析或科學運算中,程式跑得快與否,直接影響使用者體驗與系統成本。
2025/04/22
嘿,大家好!上篇教學文章我們做出了一個待辦事項清單,已經有點小工具的感覺了吧?今天我們要再升級,來做個「簡單記事本」。這個專案不只可以寫東西,還能存檔、讀檔,甚至換字體大小,感覺就像自己寫了個迷你軟體!
2025/04/22
嘿,大家好!上篇教學文章我們做出了一個待辦事項清單,已經有點小工具的感覺了吧?今天我們要再升級,來做個「簡單記事本」。這個專案不只可以寫東西,還能存檔、讀檔,甚至換字體大小,感覺就像自己寫了個迷你軟體!
2025/04/16
嘿,大家好!走到這一步,我們已經玩過 Tkinter 的基本招式、佈局、事件處理,還搞了些進階元件,應該有點信心了吧?今天我們要把這些功夫練成一套連招,來做個實用的「待辦事項清單」(To-Do List),順便聊聊怎麼把程式寫得更漂亮、更好用。準備好了嗎?這就上場啦!
2025/04/16
嘿,大家好!走到這一步,我們已經玩過 Tkinter 的基本招式、佈局、事件處理,還搞了些進階元件,應該有點信心了吧?今天我們要把這些功夫練成一套連招,來做個實用的「待辦事項清單」(To-Do List),順便聊聊怎麼把程式寫得更漂亮、更好用。準備好了嗎?這就上場啦!
看更多
你可能也想看
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
Anytype主要分為四區塊:目錄欄(Widget組成)、主編輯畫面、導航選單、設定區。
Thumbnail
Anytype主要分為四區塊:目錄欄(Widget組成)、主編輯畫面、導航選單、設定區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
本篇文章將教你如何使用Python和PyQt5來建立一個GUI應用程式。PyQt5是一個相當流行的Python模組,透過這個文章你將學習如何使用它來建立一個互動式的應用程式。
Thumbnail
本篇文章將教你如何使用Python和PyQt5來建立一個GUI應用程式。PyQt5是一個相當流行的Python模組,透過這個文章你將學習如何使用它來建立一個互動式的應用程式。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News