1

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

有没有办法获取应用程序中使用的所有 wxID 及其相应的小部件?

4

3 回答 3

2

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

于 2013-05-08T10:29:20.477 回答
2

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

这使很多事情变得更容易,甚至是微不足道的,包括你的问题。

于 2013-05-08T11:05:46.127 回答
1

我会看看 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 会更有意义。

于 2013-05-08T13:23:45.300 回答