我填充组合框,用户选择其中一个选项。然后他们关闭一切。
稍后,用户可能会再次打开窗口,要求他们重新输入并重新选择选项会很乏味,所以我想“加载”它们。
我尝试使用 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”模块,但这一切似乎都很令人困惑。因此,在我走上错误的道路之前,我只是想知道执行此类操作的标准方法是什么 - 保存填充的元素/选项。
Cheers,
看来你想做的是腌制QComboBox
实例,所以你遇到的问题实际上与pickle
更重要的是,您不能使用它来保存(sip-wrapped)Qt 小部件。
根据组合框的填充方式,最好保存所选项目或所选字符串的索引,并在(重新)打开窗口时重新选择该项目。
但要小心,如果组合框中的可选项目集可以在关闭和重新打开窗口之间发生变化,在这种情况下,索引将关闭,或者“选定”字符串可能引用不属于其中的项目组合框不再。
EDIT:
我不确定是否有一个单一的“方法”可以涵盖所有用例,您必须考虑安全性、兼容性(跨 Python、Qt 和应用程序的较新版本)、与其他程序的互操作性以及可能的其他因素决定走哪条路。
就我个人而言,我要么使用 pickling(协议 0 使其在 Python 版本之间兼容并且在某种程度上具有人类可读性),要么使用更专门的文件格式以使其可由其他应用程序读取。如果您的应用程序仅适用于 Windows,您还可以考虑保存到注册表而不是文件,请参阅这个答案 https://stackoverflow.com/a/17646175/897968举个例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)