如何处理窗口缩放时保持内容比例不变?
时间: 2024-09-17 13:04:24 浏览: 90
在PyQt5中,如果你想要窗口内的内容在缩放时保持其原始的比例,你需要使用固定比例的布局并且计算每个部件的大小以适应新尺寸。以下是一个例子,使用`QSizeConstraint`和`QGraphicsView`来实现在缩放时保持内容比例:
```python
from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView
from PyQt5.QtGui import QPainter, QImage, QPixmap, QSize
class ScaleAwareGraphicsView(QGraphicsView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.scene = QGraphicsScene()
self.setScene(self.scene)
self.setSizeConstraint(QGraphicsView.SizeAdjustPolicy.AdjustToContents)
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
def sizeHint(self):
size = super().sizeHint()
return QSize(size.width(), size.height() * self.scene.devicePixelRatioF())
def minimumSizeHint(self):
size = super().minimumSizeHint()
return QSize(size.width(), size.height() * self.scene.devicePixelRatioF())
def resizeEvent(self, event):
width, height = event.size().width(), event.size().height()
if width <= 0 or height <= 0:
return
self.fitInView(self.scene.itemsBoundingRect(), Qt.KeepAspectRatioByExpanding)
# 使用ScaleAwareGraphicsView作为窗口的中心部分
central_widget = ScaleAwareGraphicsView()
main_window = QMainWindow()
main_window.setCentralWidget(central_widget)
main_window.show()
```
在这个例子中,`ScaleAwareGraphicsView`会自动保持内容的宽高比,并在窗口大小改变时适当地调整视图的大小。
阅读全文