gpt4 book ai didi

python - PyQt 记住 UI 状态/项目

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:42 24 4
gpt4 key购买 nike

我正在使用 QStackedWidget,在屏幕 1 上,我有一个带有项目列表的 QTreeWidget,屏幕 2 有一些组合框和复选框。双击树形小部件中的一个项目将我带到屏幕 2。我想要做的是开发一种记住所选设置的方法。

例如。如果我双击树形小部件中的“Item1”,在屏幕 2 的复选框和组合框中选择一些选项,然后返回屏幕 1 并选择“Item2”,其中当我选择一组不同的组合项等时。再次返回第一个屏幕并双击“Item1”时,我应该恢复之前与之关联的选项。

希望这是有道理的。我需要有关执行此操作的最佳方法的帮助,一些代码示例会很棒。

非常感谢任何帮助。

最佳答案

所有树形小部件项都有一个 setData您可以用来存储关联值的方法,在这种情况下,它只是一个包含设置的 dict

为了更容易保存和恢复设置,建议确保所有复选框、组合框等都有一个共同的父项,并且它们都被赋予一个唯一的 objectName。这样一来,迭代它们就会变得很容易:

    def saveSettings(self):
settings = {}
for child in self.settingsParent.children():
name = child.objectName()
if not name:
continue
if isinstance(child, QtGui.QCheckBox):
settings[name] = child.isChecked()
elif isinstance(child, QtGui.QComboBox):
settings[name] = child.currentIndex()
...
return settings

def restoreSettings(self, settings):
for child in self.settingsParent.children():
name = child.objectName()
if name not in settings:
continue
if isinstance(child, QtGui.QCheckBox):
child.setChecked(settings[name])
elif isinstance(child, QtGui.QComboBox):
child.setCurrentIndex(settings[name])
...

要将设置添加到 tree-widget 项目,您只需要执行如下操作:

    settings = self.saveSettings()
item.setData(0, QtCore.Qt.UserRole, settings)

要检索它们,请执行以下操作:

    settings = item.data(0, QtCore.Qt.UserRole)
self.restoreSettings(settings)

但请注意,如果您使用的是 python2,您可能需要在此处执行额外的步骤,因为 data 将返回一个 QVariant,而不是一个 dict。如果是这种情况,要获取 dict,您需要改为执行以下操作:

    settings = item.data(0, Qt.QtCore.Qt.UserRole).toPyObject()

或者,您可以在所有地方去掉 QVariant,但将它放在程序的开头:

    import sip
sip.setapi('QVariant', 2)
from PyQt4 import ... etc

关于python - PyQt 记住 UI 状态/项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com