從迴圈中獲取 Tkinter Entry
Tkinter 是一個流行的 Python 庫,用於建立圖形使用者介面 (GUI)。它提供了各種小部件,允許使用者與程式互動。其中一個小部件是 Entry 小部件,用於接受使用者的單行文字輸入。在使用 Tkinter 時,您可能會遇到需要從迴圈中訪問 Entry 小部件中輸入的值的情況。在本文中,我們將探討實現此目的的不同方法。
Tkinter 提供了多種獲取 Entry 小部件值的方法,但當需要從迴圈中獲取值時,挑戰在於正確管理程式流程。以下是一些可以有效解決此問題的策略:
使用 StringVar - 一種方法是將 StringVar 與 Entry 小部件關聯。StringVar 是一個 Tkinter 變數類,專門用於儲存字串值。您可以建立一個 StringVar 物件,將其設定為 Entry 小部件的 textvariable,並在需要時訪問其值。以下是一個示例:
示例
import tkinter as tk def process_entries(entries): for entry in entries: value = entry.get() # Process the value print(value) def main(): root = tk.Tk() root.title("Getting the Tkinter Entry from a Loop using StringVar") root.geometry("720x250") # Create Entry widgets entries = [] for i in range(5): var = tk.StringVar() entry = tk.Entry(root, textvariable=var) entry.pack() entries.append(var) # Create a button to trigger processing button = tk.Button(root, text="Process", command=lambda: process_entries(entries)) button.pack() root.mainloop() if __name__ == "__main__": main()
在此示例中,我們建立了一個名為 entries 的 StringVar 物件列表,以儲存 Entry 小部件中輸入的值。
輸出
當單擊“處理”按鈕時,將呼叫 process_entries() 函式,該函式遍歷 entries 列表並使用每個 StringVar 的 get() 方法檢索值。
Hi This is Tutorialspoint website Check for all the technical topics
使用回撥函式 - 另一種方法是使用回撥函式來檢索 Entry 小部件中輸入的值。當您希望在使用者輸入時動態更新值時,這很有用。以下是一個示例:
示例
import tkinter as tk def process_entry(entry): value = entry.get() # Process the value print(value) def main(): root = tk.Tk() root.title("Getting the Tkinter Entry from a Loop using a callback function") root.geometry("720x250") # Create Entry widgets for i in range(5): entry = tk.Entry(root) entry.pack() # Associate the callback function with the Entry widget entry.bind("<FocusOut>", lambda event, e=entry: process_entry(e)) root.mainloop() if __name__ == "__main__": main()
在此示例中,我們在迴圈中建立 Entry 小部件,並將 <FocusOut> 事件繫結到每個 Entry。
輸出
當 Entry 小部件失去焦點時(即,當用戶單擊其外部時),將觸發該事件。回撥函式 process_entry() 將使用相應的 Entry 小部件作為引數呼叫,允許我們使用 get() 方法檢索其值。
Hi this is Tutorialspoint website
將 Entry 小部件儲存在列表或字典中 - 如果您事先知道需要的 Entry 小部件的數量,則可以將它們儲存在列表或字典中,以便以後訪問它們。以下是一個使用列表的示例:
示例
import tkinter as tk def process_entries(entries): for key, entry in entries.items(): value = entry.get() # Process the value print(f"{key}: {value}") def main(): root = tk.Tk() root.title("Storing Tkinter Entry Widgets in a list or dictionary") root.geometry("720x250") # Create Entry widgets and store them in a dictionary entries = {} for i in range(5): key = f"Entry {i+1}" entry = tk.Entry(root) entry.pack() entries[key] = entry # Create a button to trigger processing button = tk.Button(root, text="Process", command=lambda: process_entries(entries)) button.pack() root.mainloop() if __name__ == "__main__": main()
在此版本中,我們在迴圈中建立 Entry 小部件,並將它們儲存在名為 entries 的字典中。每個 Entry 小部件都與一個唯一的鍵(例如,“Entry 1”、“Entry 2”)關聯,用於識別目的。
輸出
當單擊“處理”按鈕時,將呼叫 process_entries() 函式,該函式遍歷字典並使用每個 Entry 小部件的 get() 方法檢索值。然後列印或處理相應的鍵值對。
Entry 1: Hi Entry 2: this Entry 3: is Entry 4: tutorialspoint Entry 5: webstite
結論
這些是在迴圈中獲取 Tkinter Entry 小部件中輸入值的一些方法。根據應用程式的複雜性和特定需求,您可以選擇最適合您需求的方法。請記住,正確管理程式流程並處理任何必要的事件繫結或回撥函式,以確保流暢的使用者體驗。