pyqt5 QPainter加入到水平布局中,并根据预先设置的几个坐标点绘制图像,且图像随窗口变大变小,且变化过程不改变图像本身比例
时间: 2024-06-12 10:06:22 浏览: 53
PyQt5利用QPainter绘制各种图形的实例
以下是一个示例程序,演示如何将QPainter绘制的图像添加到水平布局中,并且随着窗口的大小变化而自动调整。
```python
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout
from PyQt5.QtGui import QPainter, QBrush, QPen
from PyQt5.QtCore import Qt
class MyWidget(QWidget):
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
# 预先设置的坐标点
points = [(100, 100), (200, 150), (150, 250), (50, 200)]
# 计算当前窗口大小与预先设置的大小的比例
ratio = min(self.width() / 400, self.height() / 400)
# 缩放坐标点
scaled_points = [(int(x * ratio), int(y * ratio)) for x, y in points]
# 绘制图像
painter.setPen(QPen(Qt.red, 2))
painter.setBrush(QBrush(Qt.yellow))
painter.drawPolygon(*scaled_points)
def resizeEvent(self, event):
# 窗口大小改变时重新绘制
self.update()
if __name__ == '__main__':
app = QApplication([])
widget = MyWidget()
layout = QHBoxLayout()
layout.addWidget(widget)
window = QWidget()
window.setLayout(layout)
window.show()
app.exec_()
```
在这个示例程序中,我们创建了一个名为`MyWidget`的自定义QWidget,并重写了它的`paintEvent`和`resizeEvent`方法。在`paintEvent`方法中,我们使用QPainter绘制了一个多边形,多边形的坐标点是预先设置好的。在绘制之前,我们根据当前窗口大小与预先设置的大小之间的比例对坐标点进行了缩放。在`resizeEvent`方法中,我们重新绘制了窗口。
接下来,我们将MyWidget添加到一个水平布局中,并将该布局添加到一个QWidget中。最后,我们显示了这个QWidget。当我们调整窗口大小时,多边形的大小将自动调整,但是它的比例将始终保持不变。
阅读全文