HOWTO · Tkinter

如何獲取 Tkinter 文字框中的輸入

本文探討如何使用 get 方法從 Tkinter 文字框獲取輸入。學習如何指定起始和結束索引以精確擷取文字、實現驗證,並以使用者友善的介面增強您的 Python 應用程式。發現實用的程式碼範例和詳細說明,在您的 Tkinter 專案中有效地擷取使用者輸入。

本頁內容

要讀取 Tkinter 的 Text 控制元件,請以起始索引和結束索引呼叫其 get 方法。對於完整內容,使用 text_box.get("1.0", "end-1c"):1.0 標記開頭,end-1c 則不包含控制元件末尾的換行符。

使用 Tkinter Text 控制元件擷取文字

這個完整的視窗允許使用者輸入多行文字,並透過按鈕擷取它們。回呼將返回的字串保存在 user_input 中;請將 print 呼叫替換為您應用程式所需的處理。

import tkinter as tk

def get_input():
    user_input = text_box.get("1.0", "end-1c")
    print("User Input:", user_input)

root = tk.Tk()
root.title("Read Text Input")

text_box = tk.Text(root, height=8, width=40)
text_box.pack(padx=8, pady=8)

get_button = tk.Button(root, text="Get Input", command=get_input)
get_button.pack(pady=(0, 8))

root.mainloop()

這個 GUI 範例在所提供的執行時證據中未被執行;說明遵循 Tkinter 的索引語意。

第一個索引是包含性的,結束索引標記擷取停止的位置。get 也接受單一索引;沒有結束索引時,它返回該位置的字元,而不是整個控制元件。

選擇起始和結束索引

Tkinter 文字索引使用 line.column 形式。1.0 表示第一行的第一個字元,而 2.0 表示第二行的開頭。因此,text_box.get("1.0", "2.0") 選擇第一行,包括其存在時的換行符。要讀取較小的範圍,請選擇靠後的行和列。結束位置不包含在返回的文字中。

排除末尾的換行符

Text 控制元件始終在末尾保留一個換行符,即使在使用者沒有輸入任何文字時也是如此。讀取到 "end" 會包括那個末尾的換行符。使用 "end-1c" 作為結束索引,只省略那最後一個字元;等效的 Tkinter 表達式是 tk.END + "-1c"。在比較擷取到的值、保存它,或將其傳遞給不應收到多餘換行符的程式碼時,這一區別很重要。

使用 get 方法擷取到的 Tkinter Text 控制元件輸入

使用 get 方法從 Tkinter Text 控制元件擷取到的部分文字

驗證擷取到的輸入

當應用程式要求有意義的內容時,檢查字串的修剪檢視:if not user_input.strip():。這會將僅包含空白的輸入視為空。如果原始間距或換行符很重要,請保持 user_input 不變;僅將修剪後的值用於檢查,除非您的應用程式有意要正規化使用者的文字。當檢查失敗時,在介面中顯示意見回饋;當檢查通過時,繼續處理原始值。