迭代wxPython中的控件以保存会话数据



我有一个用wxPython编写的GUI(带有boa构造函数)。我想将用户的会话保存到一个文件中,以便下次应用程序启动时加载。我想避免通过迭代控件并将其值保存到字典中来"手动"保存每个值。

是否有一种方法可以获得应用程序中使用的所有wxid及其相应的小部件?

您根本不需要id,只需从顶层窗口开始,并使用wxWindow::GetChildren()方法递归枚举所有子窗口。然后,对于每个子控件,您需要动态地确定其类型(如果只使用几种类型的控件,这将更简单)并保存其值。您可能还会发现,在创建控件时为它们指定名称(而不是标签)是很有用的,这样可以为每个控件提供比数字ID更方便的唯一标识符。

恕我直言,你做错了。用户会话的状态最好不要存储在控件的值中。状态应该存储在一个"模型"中。"视图"应该在需要显示模型状态时查询模型,以及在需要将状态保存到文件时查询模型。http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller。

这会让很多事情变得更容易,甚至是琐碎的事情,包括你的问题。

我会看看wx.lib.agw中的PersistenceManager机制。这里是它的原始文档:http://xoomer.virgilio.it/infinity77/AGW_Docs/persist.persistencemanager.PersistenceManager.html

以下是更新的文档:

https://docs.wxpython.org/wx.lib.agw.persist.persistencemanager.PersistenceManager.html wx.lib.agw.persist.persistencemanager.PersistenceManager

或者,您可以使用框架或面板的GetChildren()方法抓取所有小部件并从中提取值,但我认为PersistenceManager更有意义。

最新更新