使用 TKinter 不断扩大的条目数量
Ever expanding amount of Entries with TKinter
我想做的是制作一个 GUI,当您开始在一个输入框中输入时,另一个会出现在您正在输入的输入框的正下方。然后当您开始输入时,弹出的那个,另一个弹出。这对 TKinter 和 Python 可行吗?
编辑:
所以我目前拥有的是:
entry1 = StringVar()
numberLabel3 = Label(window, text = "3. External meeting attendees")
r+=1
numberLabel3.grid(column = 0, row = r, sticky = W)
externalAtendeesLabel = Label(window, text = "input name of external meeting atendee: ")
r+=1
externalAtendeesLabel.grid(column = 1, row = r, sticky = E)
externalAtendeesEntry = Entry(window, textvariable = entry1)
externalAtendeesEntry.grid(column = 2, row = r)
#Note to self: Find a smart way of dynamically expanding this "list" of entries
(上面和下面还有更多代码,但这是我问题的相关代码)
其中 r
是我创建的一个变量,可以更轻松地将内容插入到我相当长的代码的中间。
我使用的导入是:
from tkinter import *
from PIL import ImageTk
from PIL import Image
import os
我使用图像模块 OS 在我的 GUI 中进一步插入图像。
我当时想的是制作一个功能,我可以通过某种方式设置它来检查最新的输入框,但是我 运行 遇到了一个问题,即如果这个功能可能是无限的,我将不得不动态创建新变量,以便我可以访问用户输入的信息。这些变量将保存信息,就像我的 entry1
变量为 externalAtendeesEntry
所做的一样。
我还必须为更多条目动态创建变量。
如何动态创建可能无限量的变量?
我知道这是一种重新post,但我发现的其他人都说你应该使用字典,但在那种情况下它不能是无限的。只能有限到我的字典都没有了
首先,您不需要使用 StringVar
。它只会使您的代码复杂化,而不会提供任何实际价值。答案的另一部分是将条目存储在列表中。
例如,创建一个名为 addEntry
的函数,它创建一个条目并将其添加到列表中:
entries = []
...
def addEntry():
entry = tk.Entry(...)
entry.pack(...)
entries.append(entry)
要在以后获取值,只需遍历列表即可:
for entry in entries:
print(entry.get())
有了它,您可以随时添加条目。例如,您可以绑定到 <Any-KeyRelease>
以在用户键入时创建一个新条目(确保仅在没有空白条目的情况下才这样做)。或者,绑定到 <Return>
或 <FocusOut>
,或者单击 "new person" 按钮,或者您决定的其他方式。
我想做的是制作一个 GUI,当您开始在一个输入框中输入时,另一个会出现在您正在输入的输入框的正下方。然后当您开始输入时,弹出的那个,另一个弹出。这对 TKinter 和 Python 可行吗?
编辑:
所以我目前拥有的是:
entry1 = StringVar()
numberLabel3 = Label(window, text = "3. External meeting attendees")
r+=1
numberLabel3.grid(column = 0, row = r, sticky = W)
externalAtendeesLabel = Label(window, text = "input name of external meeting atendee: ")
r+=1
externalAtendeesLabel.grid(column = 1, row = r, sticky = E)
externalAtendeesEntry = Entry(window, textvariable = entry1)
externalAtendeesEntry.grid(column = 2, row = r)
#Note to self: Find a smart way of dynamically expanding this "list" of entries
(上面和下面还有更多代码,但这是我问题的相关代码)
其中 r
是我创建的一个变量,可以更轻松地将内容插入到我相当长的代码的中间。
我使用的导入是:
from tkinter import *
from PIL import ImageTk
from PIL import Image
import os
我使用图像模块 OS 在我的 GUI 中进一步插入图像。
我当时想的是制作一个功能,我可以通过某种方式设置它来检查最新的输入框,但是我 运行 遇到了一个问题,即如果这个功能可能是无限的,我将不得不动态创建新变量,以便我可以访问用户输入的信息。这些变量将保存信息,就像我的 entry1
变量为 externalAtendeesEntry
所做的一样。
我还必须为更多条目动态创建变量。
如何动态创建可能无限量的变量?
我知道这是一种重新post,但我发现的其他人都说你应该使用字典,但在那种情况下它不能是无限的。只能有限到我的字典都没有了
首先,您不需要使用 StringVar
。它只会使您的代码复杂化,而不会提供任何实际价值。答案的另一部分是将条目存储在列表中。
例如,创建一个名为 addEntry
的函数,它创建一个条目并将其添加到列表中:
entries = []
...
def addEntry():
entry = tk.Entry(...)
entry.pack(...)
entries.append(entry)
要在以后获取值,只需遍历列表即可:
for entry in entries:
print(entry.get())
有了它,您可以随时添加条目。例如,您可以绑定到 <Any-KeyRelease>
以在用户键入时创建一个新条目(确保仅在没有空白条目的情况下才这样做)。或者,绑定到 <Return>
或 <FocusOut>
,或者单击 "new person" 按钮,或者您决定的其他方式。