[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
追極光的北極熊|軟體工程師的小天地
9會員
150內容數
歡迎來到我的部落格!這裡記錄了軟體工程師的日常生活點滴,並分享程式設計與演算法的實用教學。無論你是初學者還是有經驗的開發者,都能在這裡找到深入淺出的技術解析與實戰技巧。此外,我也會分享工作中的心路歷程與學習心得,讓你不僅學到技術,更能瞭解軟體開發的實際應用與挑戰。希望透過這個平台,能與你共同成長,激發對技術的熱情!
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
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
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中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News