嘿,大家好!到目前為止,我們已經能讓視窗動起來,還能抓資料、處理按鈕點擊,感覺有點像回事了吧?不過,單靠標籤、按鈕、輸入框有點單調,今天我們要來玩點進階的東西,像是勾選框、選單、下拉清單這些,讓你的應用更有「專業感」。準備好了嗎?我們這就開始啦!
進階元件:讓介面更活潑
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()
跑起來後,勾選你喜歡的,點「送出」,標籤就顯示你的選擇。


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()
選一個,點「確認」,標籤就告訴你選了啥。


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()
跑起來,選個水果,點按鈕,標籤就顯示你的選擇。


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()
點「檔案」下拉,選「說哈囉」,標籤就變了;選「結束」就關視窗。

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()
沒輸入就按,跳警告;有輸入就跳成功訊息。


showwarning
和showinfo
:不同的訊息框樣式,還有showerror
之類的可以用。
小挑戰:動手做個小工具
來試試吧!做個「早餐點餐機」:
- 用 Checkbutton 列出三個早餐選項(像吐司、蛋餅、飯團)。
- 加個按鈕,按下去用 messagebox 顯示你選了啥(沒選就提醒)。
- 視窗標題設成「早餐點餐機」。
跑跑看,選個早餐試試,感覺自己是不是越來越像程式設計師了?

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