pyqt5 根据坐标点绘图,坐标图中会有10个点相连接,且其中某两个点连接线段是一段圆弧,图像绘制好后将其置于窗口中心,且图像大小自适应窗口变化
时间: 2024-06-12 14:06:30 浏览: 162
以下是一个根据坐标点绘制图像的示例代码,其中包括了绘制圆弧的方法:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPen, QColor, QBrush
from PyQt5.QtCore import Qt, QPoint, QRectF
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 500, 500)
self.setWindowTitle('MyWidget')
self.points = [QPoint(100, 100),
QPoint(150, 150),
QPoint(200, 200),
QPoint(250, 250),
QPoint(300, 250),
QPoint(350, 200),
QPoint(400, 150),
QPoint(450, 100),
QPoint(250, 100),
QPoint(100, 100)]
def paintEvent(self, e):
qp = QPainter(self)
qp.setRenderHint(QPainter.Antialiasing)
# 计算图像的边界矩形
x_min = min([p.x() for p in self.points])
x_max = max([p.x() for p in self.points])
y_min = min([p.y() for p in self.points])
y_max = max([p.y() for p in self.points])
w = x_max - x_min
h = y_max - y_min
margin = max(w, h) * 0.1
x_min -= margin
x_max += margin
y_min -= margin
y_max += margin
rect = QRectF(x_min, y_min, x_max - x_min, y_max - y_min)
# 设置画笔和画刷
pen = QPen(QColor(255, 0, 0), 2)
brush = QBrush(QColor(0, 0, 255, 50))
# 绘制直线和圆弧
for i in range(len(self.points) - 1):
if i == 3:
# 绘制圆弧
center = QPoint(self.points[3].x(), self.points[3].y() - 50)
radius = 50
startAngle = 90 * 16
spanAngle = 180 * 16
qp.drawArc(center, radius, radius, startAngle, spanAngle)
else:
# 绘制直线
qp.drawLine(self.points[i], self.points[i+1])
# 将图像置于窗口中心
qp.translate(self.width()/2 - (x_min + x_max)/2,
self.height()/2 - (y_min + y_max)/2)
# 缩放图像以适应窗口大小变化
scale = min(self.width() / (x_max - x_min), self.height() / (y_max - y_min))
qp.scale(scale, scale)
# 绘制图像
qp.setPen(pen)
qp.setBrush(brush)
qp.drawPolygon(self.points)
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())
```
在这个示例代码中,我们首先定义了一个包含10个点的列表 `self.points`,其中第4个点和第5个点之间的线段需要绘制圆弧。我们使用直线和圆弧的绘制方法分别绘制了坐标图中的线段和圆弧。在绘制完成后,我们将图像置于窗口中心,并缩放以适应窗口大小的变化。最终的图像效果如下:
![image](https://user-images.githubusercontent.com/43759148/127811023-d8c48c56-2c9d-4e2d-8f32-afe7a87f0d62.png)
阅读全文