python - 使用序列化的 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__
每个孩子的方法的递归函数,但没有奏效。有什么建议么?
解决方案
甚至可以这样做吗?
不它不是。Tkinter 小部件作为 C 对象存在于嵌入式 tcl 解释器中。无法保存和恢复嵌入式 tcl 解释器的状态。
推荐阅读
- java - “team_name”无法解析为变量
- shell - 用保持字符串完整的模式替换字符串
- android - 安卓视图
- telnet - Telnet 内部工作:如果客户端连接到 HTTP 服务器,是否需要 telnet 服务器?
- azure-devops - 如何使用 Visual Studio Code 和 VSTS 对 ARM 模板实施代码审查
- android - RadAutoCompleteTextView 自动完成
- python - 如何监视内部函数返回值
- augmented-reality - 使用 aframe /aframe-ar 在 3D 框中显示文本
- spring - Spring Security基于用户从db中分配的多个角色中选择的角色登录
- html - 我怎么能放