我正在创建一个程序,该程序将有一个接收两个输入的框,一个事件名称和为该事件分配的时间,稍后将输出已添加的所有事件的列表。这是输入框的类:
Activity
我对编程很新,但我相信存储/sdcard/Android/data/package.your.app
和class 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
答案 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字符串自行完成。
从您的问题来看,我不确定这是否是您想要做的。