我是想要一个树状结构图 父节点在中间 左下是子节点1 右下是子节点2 类似这样的可编辑的数据tree 使用python
时间: 2024-03-27 11:35:49 浏览: 20
您可以使用Python的PyQt5库创建一个可编辑的树形控件。下面是一个简单的例子,展示如何使用QGraphicsView、QGraphicsScene和QGraphicsItem创建一个可编辑的树形控件:
```python
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsItem, QGraphicsTextItem, QGraphicsEllipseItem
from PyQt5.QtGui import QColor, QPen, QBrush
from PyQt5.QtCore import Qt
class Node(QGraphicsItem):
def __init__(self, parent=None):
super().__init__(parent)
self.children = []
self.setFlag(QGraphicsItem.ItemIsMovable, True)
self.setFlag(QGraphicsItem.ItemIsSelectable, True)
self.rect = QGraphicsEllipseItem(-40, -40, 80, 80, self)
self.rect.setPen(QPen(QColor(0, 0, 0)))
self.rect.setBrush(QBrush(QColor(255, 255, 255)))
self.text = QGraphicsTextItem(self)
self.text.setPlainText("Node")
self.text.setPos(-20, -10)
def addChild(self, child):
self.children.append(child)
def childAt(self, index):
return self.children[index]
def childCount(self):
return len(self.children)
def boundingRect(self):
return self.rect.boundingRect()
def paint(self, painter, option, widget=None):
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(self.pen)
painter.setBrush(self.brush)
painter.drawEllipse(self.rect.rect())
class TreeWidget(QGraphicsView):
def __init__(self, parent=None):
super().__init__(parent)
self.scene = QGraphicsScene(self)
self.setScene(self.scene)
self.rootNode = Node()
self.rootNode.setPos(0, 0)
self.scene.addItem(self.rootNode)
self.leftChild = Node(self.rootNode)
self.leftChild.setPos(-100, 100)
self.leftChild.text.setPlainText("Left Child")
self.rootNode.addChild(self.leftChild)
self.scene.addItem(self.leftChild)
self.rightChild = Node(self.rootNode)
self.rightChild.setPos(100, 100)
self.rightChild.text.setPlainText("Right Child")
self.rootNode.addChild(self.rightChild)
self.scene.addItem(self.rightChild)
if __name__ == '__main__':
app = QApplication([])
tree = TreeWidget()
tree.show()
app.exec_()
```
在这个例子中,我们创建了一个Node类来表示树形控件中的节点。该类继承自QGraphicsItem,因此可以在QGraphicsScene中使用。每个节点都包含一个矩形和一些文本。我们还为节点添加了移动和选择功能。
我们还创建了一个TreeWidget类,该类继承自QGraphicsView,用于显示树形控件。在这个类中,我们创建了一个根节点和两个子节点。我们还使用QGraphicsScene.addItem方法将这些节点添加到QGraphicsScene中。
在这个例子中,我们只添加了一个根节点和两个子节点。您可以根据需要添加更多的节点,并使用addChild方法将它们添加到父节点中。