我正在尝试创建一个PyQt5应用程序,用户可以在其中单击图形视图窗口以放置矩形。我设法使用fitInView方法缩放窗口,并且工作正常但是每当更改窗口大小时,新放置对象的相对大小也会更改。我怎样才能使一切都与窗口/屏幕/ graphicsView大小相关?我尝试使用场景宽度,但是当调整窗口大小时,它会使用缩放和位置做出奇怪的事情。
这是我的主窗口的课程。 gv是图形视图,Ui_MainWindow来自QtDesigner。
class Window(Ui_MainWindow, QMainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.scene = QGraphicsScene()
self.scene.setSceneRect(QRectF(0, 0, 100, 100))
self.gv.setScene(self.scene)
self.gv.fitInView(0, 0, 100, 100, Qt.KeepAspectRatio)
def resizeEvent(self, e):
self.gv.fitInView(0, 0, 100, 100, Qt.KeepAspectRatio)
这是我的自定义图形视图类:
from PyQt5.QtWidgets import QGraphicsView
from PyQt5.QtGui import QPolygonF
from PyQt5.QtCore import QPoint, QRectF
class GraphicsView(QGraphicsView):
def __init__(self, window):
super().__init__(window)
def mousePressEvent(self, QMouseEvent):
rect = self.mapToScene(QMouseEvent.x(), QMouseEvent.y(), 5, 5)
\\ rect = self.mapToScene(QMouseEvent.x(), QMouseEvent.y(), self.width()/20, self.height()/20)
self.scene().addPolygon(rect)
作为一个侧面问题,我现在按照建议这样做吗?比如使用fitInView和mapToScene等?
当我设置场景矩形时,我应该选择哪些值代替100?那只是武断的。
编辑:我设法通过使用图形视图宽度作为基本变量来实现类似于我想要的东西,如上面代码中的注释所示。但是我现在遇到的问题是,如果你调整窗口大小,它会显示以前不可见的场景区域。有没有办法拉伸场景或类似的东西,以确保它总是填充图形视图?