flo*_*510 3 python settings pyqt
我QStackedWidget在屏幕1上使用了一个位置,我有一个QTreeWidget项目列表,屏幕2有一些组合框和复选框.双击树窗口小部件中的项目将我带到屏幕2.我想要做的是开发一种记住所选设置的方法.
所以对于例如.如果我双击" 项目1在treewidget'选择在检查和组合框在屏幕2的一些选项和返回屏幕1,选择’ 项目2 ",其中,这个时候我选择一组不同的组合项目等.在回去再次到第一个屏幕并双击' 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])
...
Run Code Online (Sandbox Code Playgroud)
要将设置添加到树窗口小部件项目,您只需要执行以下操作:
settings = self.saveSettings()
item.setData(0, QtCore.Qt.UserRole, settings)
Run Code Online (Sandbox Code Playgroud)
并检索它们,执行以下操作:
settings = item.data(0, QtCore.Qt.UserRole)
self.restoreSettings(settings)
Run Code Online (Sandbox Code Playgroud)
但是请注意,如果你使用的是python2,你可能需要在这里采取额外的步骤,因为data它将返回a QVariant而不是a dict.如果是这种情况,要获得dict,您将需要这样做:
settings = item.data(0, Qt.QtCore.Qt.UserRole).toPyObject()
Run Code Online (Sandbox Code Playgroud)
或者,你可以摆脱QVariant任何地方,但把它放在你的程序的开头:
import sip
sip.setapi('QVariant', 2)
from PyQt4 import ... etc
Run Code Online (Sandbox Code Playgroud)