我有一个非常复杂的tkinter应用程序,它是一个编辑器,目前它和window的记事本没有太大的不同但它会有很多它没有的功能。问题是,我没有正确理解用于保存gui在这个主题的方式:
保存和加载GUI-tkinter - Stack Overflow
例如,为什么save_state(self)
不在Example(tk.Frame)
中定义,为什么甚至类也是一个帧?我的是一个Tk()
小部件,这种方法可以工作吗?也不需要调用函数,他们是如何工作而不调用?你能告诉我"previous":
,"expression":
,"result":
在这部分做什么吗?:
def save_state(self):
try:
data = {
"previous": self.previous_values,
"expression": self.expressionVar.get(),
"result": self.resultLabel.cget("text"),
}
with open(FILENAME, "wb") as f:
pickle.dump(data, f)
except Exception as e:
print
"error saving state:", str(e)
下面是我的代码:
我的编辑
您不应该担心示例中的代码,而应该关注概念。您需要编写两个函数:一个用于保存数据,一个用于恢复数据。
保存数据的函数必须将这些数据收集到某种数据结构中。您链接到的代码选择了一个简单的pickle值字典。你可以使用一个sqlite数据库,一个yaml文件,一个字典,一个自定义对象,任何你想要的。
恢复数据的函数必须在启动时读取数据,然后将数据放回相应的小部件中。
对于文本编辑器,您可能想要保存打开的文件的名称。所以,你的"保存"函数可以简单地将文件名列表写入文件。你的"reload"函数需要读取文件名列表,对于每个文件,它可以在编辑器中打开一个选项卡。
你需要做的唯一一件事就是安排"save"退出时调用的函数。如果你有一个退出程序的函数,你可以在那里添加它。在您链接到的代码中,它通过执行root.wm_protocol("WM_DELETE_WINDOW", self.save_state)
来安排在程序退出时自动调用该函数。