pyqt5 根据坐标点绘图,坐标图中会有多个半圆加直线,图形都是根据坐标点绘制的,且该图能随窗口变大变小,并且处于窗口中心,图像要能随着窗口变大而变大
时间: 2024-05-02 13:22:07 浏览: 132
pyqt5源代码:关系和坐标变换:可随意挪动图中的图形的位置,记录坐标位置。方法:pyqtSignal,QPoint,Qt
5星 · 资源好评率100%
下面是一个简单的示例程序,可以根据给定的坐标点绘制出多个半圆和直线,并且可以随窗口大小变化而调整图形大小和位置:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPen, QBrush
from PyQt5.QtCore import Qt, QPoint
class MyWidget(QWidget):
def __init__(self, points):
super().__init__()
self.points = points
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
# 获取窗口大小
size = self.size()
width = size.width()
height = size.height()
# 计算图形的中心点坐标
center_x = width / 2
center_y = height / 2
# 计算图形的大小
min_size = min(width, height)
radius = min_size / 4
# 绘制半圆和直线
pen = QPen(Qt.black, 2, Qt.SolidLine)
brush = QBrush(Qt.red, Qt.SolidPattern)
painter.setPen(pen)
painter.setBrush(brush)
for point in self.points:
x, y = point
x = center_x + x * radius
y = center_y - y * radius
painter.drawArc(x - radius, y - radius, radius * 2, radius * 2, 0, 180 * 16)
painter.drawLine(QPoint(x - radius, y), QPoint(x + radius, y))
def resizeEvent(self, event):
self.update()
if __name__ == '__main__':
app = QApplication(sys.argv)
points = [(0, 0.5), (0.4, 0.4), (0.4, -0.4), (0, -0.5)]
widget = MyWidget(points)
widget.show()
sys.exit(app.exec_())
```
在该程序中,我们定义了一个 `MyWidget` 类,它继承自 `QWidget` 类,并且接受一个坐标点列表作为参数。在 `paintEvent` 方法中,我们使用 `QPainter` 类进行绘图,根据坐标点计算出每个半圆和直线的位置和大小,并且绘制出来。在 `resizeEvent` 方法中,我们调用 `update` 方法来更新绘图,以便在窗口大小变化时重新计算图形大小和位置。最后,在 `main` 函数中,我们创建一个 `MyWidget` 对象,并且传入坐标点列表,然后显示该窗口并启动应用程序。
阅读全文