首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt5:为图形场景中的项目设置坐标

PyQt5:为图形场景中的项目设置坐标
EN

Stack Overflow用户
提问于 2020-12-11 13:47:29
回答 1查看 657关注 0票数 2

我有一个scene = QGraphicsScene(),我通过scene.addEllipse(100, 100, 10, 10, greenPen, greenBrush)添加了一个椭圆。笔刷和笔是在前面设置的。我直接将QGraphicsScene添加到带有MyGraphicsView.setScene(scene)QGraphicsView中。所有这些工作,除了椭圆的位置始终是中心。addEllipse()函数中的前2个参数应该是坐标(在本例中是100,100),但是不管我在那里放置了什么,椭圆总是在中心。有什么想法吗?

编辑:现在我添加了3个这样的省略号(描述中删除的那个):

代码语言:javascript
复制
scene.addEllipse(10, 10, 10, 10, greenPen, greenBrush)
scene.addEllipse(-100, -10, 30, 30, bluePen, blueBrush)
scene.addEllipse(-100, -100, 60, 60, bluePen, blueBrush)

我的结果是:

所以很明显,坐标在某种程度上起作用,但我仍然不知道具体是怎么回事。我必须要为现场设定一个起源吗?

如果我这么做

代码语言:javascript
复制
particleList = scene.items()
print(particleList[0].x())
print(particleList[1].x())
print(particleList[2].x())

我得到:

代码语言:javascript
复制
0.0
0.0
0.0

在这一点上,我完全糊涂了,我真的很想得到一些帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-11 14:13:06

必须始终记住的一件重要事情是,QGraphicsItem的位置而不是反映了它的“左上角”坐标。

实际上,您可以有一个QGraphicsRectItem,它的QRectF定位在(100,100),但是它的位置位于(50,50)。这意味着矩形将显示在(150,150)处。形状的位置相对于项目的位置。

所有add[Shape]()函数的QGraphicsScene在其文档中都有以下重要说明:

注意,项目的几何图形是在项目坐标中提供的,其位置被初始化为(0,0)。

即使您创建一个坐标为(-100,-100)的QGraphicsEllipseItem,它仍将定位于(0,0),这是因为addEllipse()中的值(与所有其他函数一样)只描述形状的坐标。

然后,当创建QGraphicsScene时,它的sceneRect()没有显式设置,默认情况下它对应于所有项的边框。当场景被添加到视图中时,视图将根据默认为alignment()Qt.AlignCenter自动定位场景。

如果整个场景在视图中可见(即没有可见滚动条),则

视图的对齐将决定场景在视图中呈现的位置。例如,如果对齐是默认的Qt::准直中心,场景将在视图中居中,如果对齐是(Qt::AlignLeft可比Qt::AlignTop),则场景将在视图的左上角呈现。

这也意味着,如果项目在负坐标或其形状在负坐标,该视图仍将显示的场景,中心的边界,所有的项目。

因此,您可以根据需要设置场景sceneRect 视图sceneRect。如果未设置视图的sceneRect,则默认为场景的sceneRect。

如果要根据项目的位置显示项目,同时也要确保负坐标在中心“外部”正确,则必须确定可见sceneRect的大小并相应地设置它:

代码语言:javascript
复制
    boundingRect = scene.itemsBoundingRect()
    scene.setSceneRect(0, 0, boundingRect.right(), boundingRect.bottom())
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65252538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档