我想从许多tkinter Entry框中获取信息,然后将其放入字典中以传递给不同的函数。我希望密钥是变量(条目)名称,值是存储在输入框中的文本。我能够收集所有信息但字典键不正确。键引用了Entry,但我希望键是变量名,以便稍后我可以将它传递给正则表达式。这是我到目前为止使用的代码。
import tkinter as tk
class ExApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
# Build the container
container = tk.Frame(self)
container.pack(fill='both', expand=True)
container.grid_columnconfigure(0, weight=1)
container.grid_rowconfigure(0, weight=1)
self.frames = {}
frame = StartPage(container, self)
self.frames[StartPage] = frame
frame.grid(column = 0, row=0, sticky='nsew')
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
tlabel = tk.Label(self, text='This is just a test')
tlabel.pack()
pdc1 = tk.Entry(self)
pdc1.pack()
pdc2 = tk.Entry(self)
pdc2.pack()
pdc3 = tk.Entry(self)
pdc3.pack()
pdc4 = tk.Entry(self)
pdc4.pack()
self.entries = [pdc1, pdc2, pdc3, pdc4]
testbutton = tk.Button(self, text = 'test',
command= lambda: print(self.collect_entries(self.entries)))
testbutton.pack()
def collect_entries(self, list = []):
self.outputs = {}
for entry in list:
self.outputs[entry] = entry.get()
return self.outputs
app = ExApp()
app.mainloop()
这只是一个测试脚本,但我的实际脚本包含更多条目。它最终会将大量变量传递给另一个函数,但我认为它可以用一个字典来实现。
提前谢谢你。
答案 0 :(得分:0)
如果您需要名称,则必须将它们存储为字符串。例如,在元组列表中(名称,条目)。然后,您可以根据该名称的条目名称和内容创建字典。用dict理解实际上是一个班轮:
class StartPage(tk.Frame):
def __init__(self, parent, _controller):
tk.Frame.__init__(self, parent)
tk.Label(self, text='This is just a test').pack()
self.entries = list()
for name in ['pdc1', 'pdc2', 'pdc3', 'pdc4']:
entry = tk.Entry(self)
entry.pack()
self.entries.append((name, entry))
tk.Button(
self,
text='test',
command=lambda: print(self.collect_entries())
).pack()
def collect_entries(self):
return {name: entry.get() for name, entry in self.entries}