Python (PyQT):如何在没有最后一个 child 的情况下在 QTreeWidget 中插入一个 XML 文件
Python (PyQT): How to insert a XML file in QTreeWidget without the last child
我将 XML 文件插入到 QTreeWidget 中。而且我想显示所有元素而没有一个特殊的 child.
这是 XML 文件的样子:
<dir name="Work space" id="directory_0">
<dir name="Directory 1" id="directory_1">
<document name="Document 1" id="document_1_1">
<slot name="Slot 1" id="slot_1_1_1"></slot>
<slot name="Slot 2" id="slot_1_1_2"></slot>
<slot name="Slot 3" id="slot_1_1_3"></slot>
<slot name="Slot 4" id="slot_1_1_4"></slot>
</document>
<document name="Document 2" id="document_1_2"></document>
<document name="Document 3" id="document_1_3"></document>
<document name="Document 4" id="document_1_4">
<slot name="Slot 1" id="slot_1_4_1"></slot>
<slot name="Slot 2" id="slot_1_4_2"></slot>
<slot name="Slot 3" id="slot_1_4_3"></slot>
</document>
<document name="Document 5" id="document_1_5"></document>
<document name="Document 6" id="document_1_6"></document>
</dir>
<dir name="Directory 2" id="directory_2">
<document name="Document 1" id="document_2_1"></document>
<document name="Document 2" id="document_2_2"></document>
<document name="Document 3" id="document_2_3"></document>
<dir name="Directory 3" id="directory_3"></dir>
<dir name="Directory 4" id="directory_4"></dir>
</dir>
</dir>
我当前的 QTreeWidget 如下所示:
IMAGE QTREEWIDGET
但我希望它看起来像这样而不修改 XML 文件:
Image how I want it to look
而且我不知道如何为目录元素放置与称为文档的元素不同的图标。
例如,元素有一个图标,元素有另一个图标。
这是我在 QTreeWidget 中显示 XML 文件的代码:
def displayTree(tree,childs):
for child in childs:
branch = QTreeWidgetItem([child.attrib.get("id")])
branch.setIcon(0, QtGui.QIcon("resources/icons/document.png"))
if(child.find("slot")):
print("slot")
tree.addChild(branch)
tree.setIcon(0, QtGui.QIcon("resources/icons/folder.png"))
displayTree(branch, child)
self.iface.list_view.hide()
displayTree(tree, fileOpen)
我在分支if(child.findall("slot")):
上面添加了这段代码,现在它不显示它包含在插槽中的元素。
def displayTree(tree,childs):
for child in childs:
if(child.findall("slot")):
print("slot")
else:
branch = QTreeWidgetItem([child.attrib.get("id")])
branch.setIcon(0, QtGui.QIcon("resources/icons/document.png"))
tree.addChild(branch)
tree.setIcon(0, QtGui.QIcon("resources/icons/folder.png"))
displayTree(branch, child)
self.iface.list_view.hide()
displayTree(tree, fileOpen)
After adding the code, the element containing the slot is not visible
只有当 child.findall("slot")
不是 return 真实值时,您才应该添加 children;在这种情况下,您可以继续递归调用 displayTree
并将图标设置为文件夹,否则您可以假设它是一个文档并设置相关图标:
def displayTree(tree,childs):
for child in childs:
branch = QTreeWidgetItem([child.attrib.get("id")])
tree.addChild(branch)
if child.findall("slot"):
branch.setIcon(0, QtGui.QIcon("resources/icons/document.png"))
else:
branch.setIcon(0, QtGui.QIcon("resources/icons/folder.png"))
displayTree(branch, child)
self.iface.list_view.hide()
displayTree(tree, fileOpen)
我将 XML 文件插入到 QTreeWidget 中。而且我想显示所有元素而没有一个特殊的 child.
这是 XML 文件的样子:
<dir name="Work space" id="directory_0">
<dir name="Directory 1" id="directory_1">
<document name="Document 1" id="document_1_1">
<slot name="Slot 1" id="slot_1_1_1"></slot>
<slot name="Slot 2" id="slot_1_1_2"></slot>
<slot name="Slot 3" id="slot_1_1_3"></slot>
<slot name="Slot 4" id="slot_1_1_4"></slot>
</document>
<document name="Document 2" id="document_1_2"></document>
<document name="Document 3" id="document_1_3"></document>
<document name="Document 4" id="document_1_4">
<slot name="Slot 1" id="slot_1_4_1"></slot>
<slot name="Slot 2" id="slot_1_4_2"></slot>
<slot name="Slot 3" id="slot_1_4_3"></slot>
</document>
<document name="Document 5" id="document_1_5"></document>
<document name="Document 6" id="document_1_6"></document>
</dir>
<dir name="Directory 2" id="directory_2">
<document name="Document 1" id="document_2_1"></document>
<document name="Document 2" id="document_2_2"></document>
<document name="Document 3" id="document_2_3"></document>
<dir name="Directory 3" id="directory_3"></dir>
<dir name="Directory 4" id="directory_4"></dir>
</dir>
</dir>
我当前的 QTreeWidget 如下所示: IMAGE QTREEWIDGET
但我希望它看起来像这样而不修改 XML 文件: Image how I want it to look
而且我不知道如何为目录元素放置与称为文档的元素不同的图标。 例如,元素有一个图标,元素有另一个图标。
这是我在 QTreeWidget 中显示 XML 文件的代码:
def displayTree(tree,childs):
for child in childs:
branch = QTreeWidgetItem([child.attrib.get("id")])
branch.setIcon(0, QtGui.QIcon("resources/icons/document.png"))
if(child.find("slot")):
print("slot")
tree.addChild(branch)
tree.setIcon(0, QtGui.QIcon("resources/icons/folder.png"))
displayTree(branch, child)
self.iface.list_view.hide()
displayTree(tree, fileOpen)
我在分支if(child.findall("slot")):
上面添加了这段代码,现在它不显示它包含在插槽中的元素。
def displayTree(tree,childs):
for child in childs:
if(child.findall("slot")):
print("slot")
else:
branch = QTreeWidgetItem([child.attrib.get("id")])
branch.setIcon(0, QtGui.QIcon("resources/icons/document.png"))
tree.addChild(branch)
tree.setIcon(0, QtGui.QIcon("resources/icons/folder.png"))
displayTree(branch, child)
self.iface.list_view.hide()
displayTree(tree, fileOpen)
After adding the code, the element containing the slot is not visible
只有当 child.findall("slot")
不是 return 真实值时,您才应该添加 children;在这种情况下,您可以继续递归调用 displayTree
并将图标设置为文件夹,否则您可以假设它是一个文档并设置相关图标:
def displayTree(tree,childs):
for child in childs:
branch = QTreeWidgetItem([child.attrib.get("id")])
tree.addChild(branch)
if child.findall("slot"):
branch.setIcon(0, QtGui.QIcon("resources/icons/document.png"))
else:
branch.setIcon(0, QtGui.QIcon("resources/icons/folder.png"))
displayTree(branch, child)
self.iface.list_view.hide()
displayTree(tree, fileOpen)