在PyQt中,如何将项目和所选项目保存在组合框中

时间:2013-07-16 01:49:08

标签: python qt pyqt save state

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

稍后用户可能会再次打开窗口,要求他们重新输入并重新选择选项以便我们“加载”它们将会很繁琐。

我试过使用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'模块,但这一切看起来都很混乱。所以在我走错路之前,我只是想知道做这样的事情的标准方法是什么 - 保存填充的元素/选项。

干杯,

2 个答案:

答案 0 :(得分:0)

您似乎正在尝试做的是挑选QComboBox个实例,因此您遇到的问题实际上与pickle的关系不大,而且更多的是与{{1}}相关的事实。你不能用它来保存(sip-wrapped)Qt小部件。

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

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

修改

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

就个人而言,我要么使用pickling(协议0使其兼容Python版本并且有些人类可读)或更专业的文件格式以使其可被其他应用程序读取。如果您的应用程序仅限Windows,您也可以考虑保存到注册表而不是文件,请参阅this answer以获取示例。

答案 1 :(得分:0)

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

pickle.dump(str(self.WordCardsFieldSelector.currentIndex()), open( "save.p", "wb" ) )