pyside6 显示好看的流程图
时间: 2025-05-26 20:14:43 浏览: 19
### 如何使用 PySide6 绘制美观的流程图
为了实现美观的流程图,可以利用 PySide6 提供的强大绘图功能以及自定义控件的能力。以下是详细的说明和示例代码。
#### 1. 创建基本窗口并加载场景视图
PySide6 中 `QGraphicsView` 和 `QGraphicsScene` 是用于绘制复杂图形的核心组件。通过它们可以创建一个可交互的画布来展示流程图节点及其连接线。
```python
from PySide6.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QMainWindow, QVBoxLayout, QWidget
from PySide6.QtCore import Qt
from PySide6.QtGui import QPen, QColor
class FlowChartWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Flow Chart Example with PySide6")
central_widget = QWidget()
layout = QVBoxLayout(central_widget)
# 初始化 Graphics Scene 和 View
self.scene = QGraphicsScene(self)
self.view = QGraphicsView(self.scene)
layout.addWidget(self.view)
self.setCentralWidget(central_widget)
```
[^1]
#### 2. 添加节点到场景中
每个流程图中的节点可以通过继承 `QGraphicsItem` 或直接使用内置形状(如矩形、椭圆等)表示。这里我们使用简单的矩形作为节点。
```python
def add_node_to_scene(scene, text="Node", pos=(0, 0)):
rect_item = scene.addRect(
pos[0], pos[1], 100, 50,
pen=QPen(Qt.black),
brush=QColor(200, 200, 255) # 浅蓝色背景
)
# 设置文字标签
text_item = scene.addText(text)
text_item.setDefaultTextColor(Qt.darkBlue)
text_item.setFont(rect_item.font())
text_item.setParentItem(rect_item)
text_item.setX((rect_item.rect().width() - text_item.boundingRect().width()) / 2)
text_item.setY(10)
```
[^2]
#### 3. 实现连线逻辑
对于两个节点之间的连线,可以直接使用 `QGraphicsLineItem` 来完成。也可以更进一步支持曲线或者箭头样式。
```python
def connect_nodes(scene, start_pos, end_pos):
line = scene.addLine(start_pos.x()+50, start_pos.y()+25, end_pos.x(), end_pos.y()+25, QPen(Qt.red))
return line
```
[^3]
#### 4. 整合以上部分形成完整的例子
下面是一个综合性的实例程序:
```python
if __name__ == "__main__":
app = QApplication([])
window = FlowChartWindow()
# 节点位置设定
node_positions = [(i*150, j*100) for i in range(3) for j in range(2)]
nodes = []
for idx, pos in enumerate(node_positions[:4]): # 只取前四个坐标作示范
add_node_to_scene(window.scene, f"Step {idx}", pos=pos)
nodes.append(pos)
# 连接节点
lines = [
connect_nodes(window.scene, nodes[0], nodes[1]),
connect_nodes(window.scene, nodes[1], nodes[2]),
connect_nodes(window.scene, nodes[2], nodes[3])
]
window.resize(800, 600)
window.show()
app.exec_()
```
此脚本展示了如何构建基础的流程图表结构,并提供了扩展的空间以便加入更多特性比如拖拽调整大小等功能。
---
###
阅读全文
相关推荐


















