您的问题尚不清楚,因为您没有说要保存树形结构的形式。
假设您不太在意XML是可以接受的,则可以查看Qt文档中的Simple DOM Model Example。
Qt
docs中的大多数示例已移植到PyQt,并提供了源代码,可从此处下载。可以在下找到简单DOM模型示例
examples/itemviews。
编辑 :
我忽略了您正在使用PySide。对于PySide等效停泊的例子可以发现这里,或者在PySide源代码下
sources/pyside-examples/examples/itemviews。
更新 :
这是一个使用xml.etree序列化树的简单示例:
import sipsip.setapi('QString', 2)from xml.etree import cElementTree as etreefrom PyQt4 import QtGui, QtCoreclass Window(QtGui.QWidget): def __init__(self, xml): QtGui.QWidget.__init__(self) self.tree = QtGui.QTreeWidget(self) self.tree.header().hide() self.importTree(xml) self.button = QtGui.QPushButton('Export', self) self.button.clicked[()].connect(self.exportTree) layout = QtGui.QVBoxLayout(self) layout.addWidget(self.tree) layout.addWidget(self.button) def importTree(self, xml): def build(item, root): for element in root.getchildren(): child = QtGui.QTreeWidgetItem( item, [element.attrib['text']]) child.setFlags( child.flags() | QtCore.Qt.ItemIsEditable) build(child, element) item.setExpanded(True) root = etree.fromstring(xml) build(self.tree.invisibleRootItem(), root) def exportTree(self): def build(item, root): for row in range(item.childCount()): child = item.child(row) element = etree.SubElement( root, 'node', text=child.text(0)) build(child, element) root = etree.Element('root') build(self.tree.invisibleRootItem(), root) from xml.dom import minidom print(minidom.parseString(etree.tostring(root)).toprettyxml())if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window("""<?xml version="1.0" ?><root> <node text="Child (0)"> <node text="Child (0)"> <node text="Child (0)"/> <node text="Child (1)"/> </node> <node text="Child (1)"> <node text="Child (0)"/> <node text="Child (1)"/> </node> </node> <node text="Child (1)"> <node text="Child (0)"> <node text="Child (0)"/> <node text="Child (1)"/> </node> <node text="Child (1)"> <node text="Child (0)"/> <node text="Child (1)"/> </node> </node></root> """) window.setGeometry(800, 300, 300, 300) window.show() sys.exit(app.exec_())


