【问题标题】:Saving and Loading the GUI of a complex tkinter application保存和加载复杂 tkinter 应用程序的 GUI
【发布时间】:2021-02-20 12:56:39
【问题描述】:

我有一个非常复杂的 tkinter 应用程序,它是一个编辑器,目前它与 windows 的记事本并没有太大的不同,但它会有很多它没有的功能。问题是我没有正确理解本主题中用于保存 gui 的方式:

Save and Load 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)

这是我的代码:

My editor

【问题讨论】:

  • 请不要忘记它也有菜单选项可以保存
  • 你想只保存文本吗?
  • 当然不,我正在尝试向我的矿井添加这样的功能
  • 你没有任何课程,你想保存什么?
  • 我想如果我可以学习如何将 Stringvariables 保存到一个类中,或者即使没有一个类我也可以做到,我也在那里问了一些问题

标签: python python-3.x tkinter serialization pickle


【解决方案1】:

您不必担心示例中的代码,而应专注于概念。你需要写两个函数:一个是保存数据,一个是恢复数据。

保存数据的功能必须将数据收集到某种数据结构中。您链接到的代码选择了一个简单的腌制值字典。你可以使用 sqlite 数据库、yaml 文件、字典、自定义对象,任何你想要的。

恢复数据的功能必须在启动时读取数据,然后将数据放回相应的小部件中。

对于文本编辑器,您可能想要保存打开文件的名称。因此,您的“保存”功能可以简单地将文件名列表写入文件。您的“重新加载”功能需要读取文件名列表,并且对于每个文件,它可以在您的编辑器中打开一个选项卡。

您唯一需要做的另一件事是安排在退出时调用“保存”函数。如果你有退出程序的功能,你可以在那里添加它。在您链接到的代码中,它安排了在程序退出时通过执行root.wm_protocol("WM_DELETE_WINDOW", self.save_state) 自动调用该函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2020-01-22
    • 2012-07-22
    相关资源
    最近更新 更多