嘿,大家好!上次我們把視窗裡的元件排得漂漂亮亮的,像個有模有樣的介面了吧?不過,光會排隊還不夠,今天我們要讓這些按鈕、輸入框真正「活起來」,能聽你說話、跟你互動!這篇要聊的是「事件處理」和「資料處理」,簡單說,就是按下去有反應、輸入啥能抓出來。準備好了嗎?我們這就開始啦!
什麼是事件?
在 Tkinter 裡,事件就是使用者做的那些動作,比如按按鈕、敲鍵盤、滑鼠點點看。這些動作會觸發程式去做點什麼,像按個鈕跳出訊息、輸入數字算結果之類的。我們要教 Tkinter 怎麼「聽」到這些動作,然後乖乖做事。按鈕事件:點下去有反應
上次我們試過按鈕的 command,今天再來玩點花樣。假設我們要做個小遊戲:按一下按鈕,標籤上的數字加 1。
import tkinter as tk
def add_one():
current = int(label["text"]) # 抓標籤的數字
label.config(text=str(current + 1)) # 加 1 再放回去
# 開視窗
window = tk.Tk()
window.title("計數器")
window.geometry("300x200")
# 標籤,從 0 開始
label = tk.Label(window, text="0", font=("微軟正黑體", 20))
label.pack(pady=20)
# 按鈕
button = tk.Button(window, text="加一", command=add_one)
button.pack()
window.mainloop()
跑起來後,每次按「加一」,標籤的數字就增加,是不是有點像手遊的點擊遊戲?

label["text"]
:這樣可以抓出標籤的文字,這裡是字串所以要轉成 int 才能做下一步的加法運算。config(text=...)
:更改標籤內容。
輸入框資料:抓出來用
光按鈕還不夠,我們再加個輸入框,讓你自己決定要加多少:
import tkinter as tk
def add_number():
try:
num = int(entry.get()) # 抓輸入框的數字
current = int(label["text"])
label.config(text=str(current + num))
except ValueError:
label.config(text="請輸入數字啦!")
# 開視窗
window = tk.Tk()
window.title("自訂計數器")
window.geometry("300x200")
# 標籤
label = tk.Label(window, text="0", font=("微軟正黑體", 20))
label.pack(pady=20)
# 輸入框
entry = tk.Entry(window)
entry.pack(pady=10)
# 按鈕
button = tk.Button(window, text="加上去", command=add_number)
button.pack()
window.mainloop()
試試看!輸入個數字(比如 5),按「加上去」,標籤就加 5。輸錯東西(像字母),還會提醒你「請輸入數字啦!」

entry.get()
:抓出輸入框的內容。try-except
:防呆用的,萬一輸入亂七八糟的東西也不會當掉。
鍵盤與滑鼠:更多事件
除了按鈕,Tkinter 還能聽鍵盤和滑鼠的聲音,用的是 bind()。來試試按 Enter 鍵也能加數字:
import tkinter as tk
def add_number(event=None): # event 是綁定時會傳進來的
try:
num = int(entry.get())
current = int(label["text"])
label.config(text=str(current + num))
except ValueError:
label.config(text="請輸入數字啦!")
# 開視窗
window = tk.Tk()
window.title("鍵盤測試")
window.geometry("300x200")
# 標籤
label = tk.Label(window, text="0", font=("微軟正黑體", 20))
label.pack(pady=20)
# 輸入框
entry = tk.Entry(window)
entry.pack(pady=10)
entry.bind("<Return>", add_number) # 按 Enter 觸發
# 按鈕
button = tk.Button(window, text="加上去", command=add_number)
button.pack()
window.mainloop()
現在輸入數字後,按 Enter 鍵也能加了!

bind("<Return>", add_number)
:<Return> 是 Enter 鍵的意思,綁定後按下去就跑 add_number。event=None
:因為 bind 會傳個事件物件進來,沒用到就設成 None。
想玩滑鼠?試試點標籤變色:
def change_color(event):
label.config(bg="lightgreen")
label.bind("<Button-1>", change_color) # 左鍵點擊
加這兩行到上面程式,點標籤就變綠,超好玩!

小挑戰:動手玩玩
輪到你啦!試著做個簡單的「溫度轉換器」:
- 一個輸入框,讓人輸入攝氏溫度。
- 一個按鈕,按下去把攝氏轉成華氏(公式:華氏 = 攝氏 * 9/5 + 32)。
- 一個標籤,顯示轉換結果。
- 按 Enter 鍵也能轉換(用 bind)。
跑跑看,輸入 25,應該會顯示 77(華氏)。有沒有覺得自己越來越強了?

這篇小結
今天我們讓視窗動起來啦!按鈕會做事,輸入框的資料能抓出來用,還能聽鍵盤和滑鼠的聲音。怎麼樣,覺得 Tkinter 越來越像回事了吧?下次我們要玩進階元件,像選單、勾選框之類的,讓介面更豐富。有啥問題隨時問我,我們下篇見!