如何收集tkinter条目信息并输入字典

时间:2017-08-08 13:36:13

标签: python dictionary tkinter

我想从许多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()

这只是一个测试脚本,但我的实际脚本包含更多条目。它最终会将大量变量传递给另一个函数,但我认为它可以用一个字典来实现。

提前谢谢你。

1 个答案:

答案 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}