将类变量存储在字典中

时间:2015-05-31 17:16:08

标签: python class dictionary tkinter

我正在创建一个程序,该程序将有一个接收两个输入的框,一个事件名称和为该事件分配的时间,稍后将输出已添加的所有事件的列表。这是输入框的类:

Activity

我对编程很新,但我相信存储/sdcard/Android/data/package.your.appclass agendaEvent: def __init__(self, master): self.frame = Frame(master, padx=10, pady=10) self.frame.grid() self.name = Entry(self.frame) self.name.grid(row=1, column=0) self.time = Entry(self.frame, width=10) self.time.grid(row=1, column=1, padx=5) 的正确方法是在字典中。

可能有多个类同时运行的实例,并且在已经存储了这些实例之后可以运行更多实例。最好将它们全部存储在同一个字典中。

但是,我不知道如何将name变量存储在我以后可以在课外访问的字典中。这可能吗?如果是这样,怎么样?如果没有,我怎么能以一种可以在一个单独的函数中访问变量的方式存储变量?

编辑:这是复制我的问题所需的最小代码(我认为):

time

3 个答案:

答案 0 :(得分:0)

您可以使用类变量来存储实例外部可用的数据。假设您要存储映射到时间的名称,您可以添加以下内容(这假定Entry类是可清除的):

class agendaEvent:
    instances = dict()  # Class variable, access with agendaEvent.instances

    def __init__(self, master):
        self.frame = Frame(master, padx=10, pady=10)
        self.frame.grid()
        self.name = Entry(self.frame)
        self.name.grid(row=1, column=0)
        self.time = Entry(self.frame, width=10)
        self.time.grid(row=1, column=1, padx=5)
        self.instances[self.name] = self.time

现在从其他地方访问这些值:

 agendaEvent.instances

E.g。如果你有一个名字条目存储在' name'检索时间条目:

time = agendaEvent.instances[name]

答案 1 :(得分:0)

认为您需要做的是将您创建的agendaEvent个实例存储在列表中;那么你可以在之后遍历列表:

from Tkinter import *
from functools import partial

events = []  # place to store the instances

class agendaEvent:

    ...


def addOne(master):
    events.append(agendaEvent(master))  # store the new instance in the list

def addEvent():
    ...

def done(windowInstance):
    for event in events:
        ...  # use event.time, event.date, etc.
    windowInstance.destroy()
    windowInstance = ""

root = Tk()

addEventButton = Button(root, text="Add Events", command=addEvent)
addEventButton.pack()

root.mainloop()

如果可以再次调用此部分,您可能还需要清除done中的列表。

答案 2 :(得分:-1)

如果要将议程事件存储在字典中,则必须先将议程事件对象序列化,然后再将其存储为值,并在尝试访问其名称或时间时对对象进行反序列化。

您可以使用Pickle等库来完成此操作,也可以使用Json字符串自行完成。

从您的问题来看,我不确定这是否是您想要做的。