從迴圈中獲取 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 小部件中輸入值的一些方法。根據應用程式的複雜性和特定需求,您可以選擇最適合您需求的方法。請記住,正確管理程式流程並處理任何必要的事件繫結或回撥函式,以確保流暢的使用者體驗。

更新於: 2023年12月04日

586 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告