[Python教學] Tkinter:事件與資料處理 - 讓介面動起來

更新於 發佈於 閱讀時間約 6 分鐘

嘿,大家好!上次我們把視窗裡的元件排得漂漂亮亮的,像個有模有樣的介面了吧?不過,光會排隊還不夠,今天我們要讓這些按鈕、輸入框真正「活起來」,能聽你說話、跟你互動!這篇要聊的是「事件處理」和「資料處理」,簡單說,就是按下去有反應、輸入啥能抓出來。準備好了嗎?我們這就開始啦!


什麼是事件?

在 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()

跑起來後,每次按「加一」,標籤的數字就增加,是不是有點像手遊的點擊遊戲?

raw-image


  • 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。輸錯東西(像字母),還會提醒你「請輸入數字啦!」

raw-image


  • 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 鍵也能加了!

raw-image


  • 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) # 左鍵點擊

加這兩行到上面程式,點標籤就變綠,超好玩!

raw-image



小挑戰:動手玩玩

輪到你啦!試著做個簡單的「溫度轉換器」:

  1. 一個輸入框,讓人輸入攝氏溫度。
  2. 一個按鈕,按下去把攝氏轉成華氏(公式:華氏 = 攝氏 * 9/5 + 32)。
  3. 一個標籤,顯示轉換結果。
  4. 按 Enter 鍵也能轉換(用 bind)。

跑跑看,輸入 25,應該會顯示 77(華氏)。有沒有覺得自己越來越強了?

raw-image



這篇小結

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


留言
avatar-img
留言分享你的想法!
avatar-img
追極光的北極熊|軟體工程師的小天地
10會員
162內容數
歡迎來到我的部落格!這裡記錄了軟體工程師的日常生活點滴,並分享程式設計與演算法的實用教學。無論你是初學者還是有經驗的開發者,都能在這裡找到深入淺出的技術解析與實戰技巧。此外,我也會分享工作中的心路歷程與學習心得,讓你不僅學到技術,更能瞭解軟體開發的實際應用與挑戰。希望透過這個平台,能與你共同成長,激發對技術的熱情!
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
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
Anytype主要分為四區塊:目錄欄(Widget組成)、主編輯畫面、導航選單、設定區。
Thumbnail
Anytype主要分為四區塊:目錄欄(Widget組成)、主編輯畫面、導航選單、設定區。
Thumbnail
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
Thumbnail
在實務上,若Python報錯時,若引入的套件越多伴隨的異常訊息會變得越來越複雜,看到一推密密麻麻的內容時,很多時候都想直接跳過。 本文將利用Traceback來讓異常訊息變得更好理解。
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
在Python中,import是一個關鍵字,用於將其他模組或套件中的程式碼引入到當前的程式中以供使用。 這個關鍵字允許你在你的程式中使用其他地方定義的變數、函式和類等。 當你使用import時,Python會搜索指定模組或套件的位置,並將其中的程式碼載入到你的程式中,這樣你就可以在程式中使用它們
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News