首页 > 解决方案 > 使用序列化的 Tk 小部件对象保存和恢复 tkinter UI 状态

问题描述

在 Tkinter 应用程序中,我正在尝试实现 UI 保存和加载功能(例如,如果用户退出应用程序,下次他将打开它时,它将以与关闭前相同的状态打开)。请阅读有关load_state功能的评论。

def save_state(self):
    saveFileWithExplorer(jsonpickle.encode(self.root), title='Save UI State', defaultextension=".state",
                         initialfile="schema tool UI state")

def load_state(self):
    stateText = openAndReadFileWithExplorer(title='Choose UI STATE file', filetypes=(("STATE files", "*.state"), ("all files", "*.*")))
    state = jsonpickle.decode(stateText)
    # what i've tried:
    # 1. not working - does not update the UI at all
    self.root = state
    # 2. crashing on __init__
    self.root.destroy()
    self.root = stateText
    self.root.__init__()
    # 3: Nope.. not updates the state either.
    self.root.update()

root = tk.Tk()
GUI(root)

甚至可以这样做吗?
我这样做的原因是因为我的应用程序非常大,如果我能让这个方法工作,我可以轻松保存和加载任何 tkinter 应用程序的状态,而不必担心如果我忘记了什么......

还尝试了一些调用__init__每个孩子的方法的递归函数,但没有奏效。有什么建议么?

标签: pythontkinter

解决方案


甚至可以这样做吗?

不它不是。Tkinter 小部件作为 C 对象存在于嵌入式 tcl 解释器中。无法保存和恢复嵌入式 tcl 解释器的状态。


推荐阅读