PyQt记住UI状态/项

2024-03-29 11:59:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

再次在屏幕上选择两个选项,我应该恢复以前与之相关联的选项。在

希望这有道理。我需要帮助找到实现这一点的最佳方法,一些代码示例将是很好的。在

非常感谢你的帮助。在


Tags: 项目方法代码示例列表屏幕部件选项
1条回答
网友
1楼 · 发布于 2024-03-29 11:59:53

所有树小部件项都有一个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])
            ...

要将设置添加到树小部件项,只需执行以下操作:

^{pr2}$

要找回它们,请执行以下操作:

    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

相关问题 更多 >