从循环中获取 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.