在 PyQt 中,如何将项目和选定项目保存在组合框中
Posted
技术标签:
【中文标题】在 PyQt 中,如何将项目和选定项目保存在组合框中【英文标题】:In PyQt, how can I save the items and selected item in a combobox 【发布时间】:2013-07-16 01:49:07 【问题描述】:我填充了我的组合框,用户选择了其中一个选项。然后他们关闭一切。
以后用户可能会再次打开窗口,要求他们重新输入并再次选择选项会很乏味,所以我想“加载”它们。
我尝试过使用 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' 模块,但看起来很混乱。所以在我走错路之前,我只是想知道做这种事情的标准方法是什么 - 保存填充的元素/选项。
干杯,
【问题讨论】:
【参考方案1】:看来您要做的是腌制QComboBox
实例,因此您遇到的问题实际上与pickle
的关系不大,而与您无法使用它来保存的事实有关(sip-wrapped)Qt 小部件。
根据组合框的填充方式,最好保存所选项目的索引或所选字符串,然后在(重新)打开窗口时重新选择此项。
如果组合框中的可选项目集在窗口关闭和重新打开之间可能发生变化,请注意,在这种情况下,索引将关闭,或者“选定”字符串可能引用的项目不再是组合框的一部分。
编辑:
我不确定是否存在涵盖所有用例的单一“方法”,您必须考虑安全性、兼容性(跨 Python、Qt 和您的应用程序的较新版本)、与其他程序的互操作性以及可能决定走哪条路的其他因素。
就我个人而言,我要么使用 pickling(协议 0 使其在 Python 版本之间兼容,并且在某种程度上具有人类可读性),要么使用更专业的文件格式来使其可以被其他应用程序读取。如果您的应用程序仅适用于 Windows,您还可以考虑保存到注册表而不是文件,请参阅 this answer 以获取示例。
【讨论】:
好的,这就是我的想法,那么酸洗仍然是这样做的“方式”吗?还有一个文本框,我想保存插入的文本。我可以用同样的方法做到这一点。 @user1079267,我已经编辑了我的答案。如果您需要进一步的帮助,请告诉我。如果它只是“一次性”的东西,我会按照描述使用泡菜。【参考方案2】:您可以简单地转储组合框的选定索引,然后在重新加载/重新启动应用程序时加载它。语法可能是这样的
pickle.dump(str(self.WordCardsFieldSelector.currentIndex()), open( "save.p", "wb" ) )
【讨论】:
不错的单线!为了更加面向未来,我将currentIndex
放入带有名称的 dict
中,以便以后可以使用其他值进行扩展。以上是关于在 PyQt 中,如何将项目和选定项目保存在组合框中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 sql 语句中保存组合框中的选定项目和文本框中的长数字?
如何根据 DataGridView 中的选定行将组合框中的特定项目设置为选定项?