2

我填充我的组合框,用户选择其中一个选项。然后他们关闭一切。

以后用户可能会再次打开窗口,要求他们重新输入并再次重新选择选项会很乏味,所以我想“加载”它们。

我尝试使用 pickle,但显然出现了与 Qt 相关的错误:

self.WordCardsFieldSelector = QtGui.QComboBox()

#Fails when trying to do this dump
pickle.dump( self.WordCardsFieldSelector, open( "save.p", "wb" ) )


TypeError: the sip.wrapper type cannot be instantiated or sub-classed

我也看过“ConfigParser”模块,但这一切似乎都很混乱。所以在我走错路之前,我只是想知道做这种事情的标准方法是什么——保存填充的元素/选项。

干杯,

4

2 回答 2

0

看来您要做的是腌制QComboBox实例,因此您遇到的问题实际上与pickle您无法使用它来保存(sip-wrapped)Qt 小部件的事实关系不大,而更多。

根据组合框的填充方式,保存所选项目或所选字符串的索引并在(重新)打开窗口时重新选择此项目可能会更好。

请注意,如果组合框中的可选项目集可以在窗口关闭和重新打开之间发生变化,在这种情况下,索引将关闭,或者“选定”字符串可能引用不是一部分的项目组合框不再。

编辑:

我不确定是否存在涵盖所有用例的单一“方法”,您必须考虑安全性、兼容性(跨 Python、Qt 和您的应用程序的较新版本)、与其他程序的互操作性以及可能的其他因素决定走哪条路。

就我个人而言,我要么使用 pickling(协议 0 使其在 Python 版本之间兼容并且在某种程度上具有人类可读性),要么使用更专业的文件格式来使其可以被其他应用程序读取。如果您的应用程序仅适用于 Windows,您还可以考虑保存到注册表而不是文件,请参阅此答案以获取示例。

于 2013-07-16T02:51:57.967 回答
0

您可以简单地转储组合框的选定索引,然后在重新加载/重新启动应用程序时加载它。语法可能是这样的

pickle.dump(str(self.WordCardsFieldSelector.currentIndex()), open( "save.p", "wb" ) )
于 2013-07-17T04:29:40.453 回答