gpt4 book ai didi

python - PyQt:使用 setRect() 控制 QGraphicsRectItem 的位置

转载 作者:行者123 更新时间:2023-12-04 17:53:26 28 4
gpt4 key购买 nike

我第一次尝试 PyQT,目的是最终创建一些数据的非常基本的图形表示。
我目前正在尝试将两个 QGraphicsTextItem 装在 QGraphicsRectItem 中,我对看到的结果有一些疑问。

class MyRect(QGraphicsRectItem):

def __init__(self, parent = None):
super(MyRect, self).__init__(parent)

self.text_item = QGraphicsTextItem('My Text Here', self)
self.value_item = QGraphicsTextItem('My Value Here', self)
self.text_item.setDefaultTextColor(QColor(Qt.blue))
self.value_item.setDefaultTextColor(QColor(Qt.red))

self.value_item.setPos(self.text_item.boundingRect().bottomLeft())

width = max(self.text_item.boundingRect().width(), self.value_item.boundingRect().width())
height = self.text_item.boundingRect().height() + self.value_item.boundingRect().height()
self.setRect(50, 50, width, height)


class MainFrame(QDialog):

def __init__(self, parent = None):
super(MainFrame, self).__init__(parent)

### setting up the scene
self.view = QGraphicsView()
self.scene = QGraphicsScene(self)
self.view.setScene(self.scene)
self.scene.setSceneRect(0, 0, 500, 500)

### setting up MyRect
my_rect = MyRect()

self.scene.addItem(my_rect)

layout = QHBoxLayout()
layout.addWidget(self.view)
self.setLayout(layout)

self.setWindowTitle("Basic test")

以上产生这个:
enter image description here
这不是我想要的。
经过更多的实验,我发现改变这个:

self.setRect(50, 50, width, height)

为此:

self.setRect(0, 0, width, height)
self.setPos(50, 50)

成功了:
enter image description here
怎么会?使用 setRect() 设置矩形位置与使用 setPos() 显式设置位置有什么区别?

最佳答案

不同之处在于函数是相对于不同的坐标系定义的。根据文档,setPos() 定义矩形在其父坐标 系统中的位置,而 setRect() 定义矩形在它自己的本地坐标系 中的位置和大小。所以setPos()(x,y)setRect()(x,y)意义不同。

使用 setPos(50, 50),您是说矩形局部坐标系的原点位于坐标系中的 (50, 50) 位置QGraphicsScene(它的父级)的。然后使用 setRect(0, 0, width, height),你说矩形位于原点 (0,0) 在它自己的坐标系中(实际上是场景坐标系中的(50, 50)

关于python - PyQt:使用 setRect() 控制 QGraphicsRectItem 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42439455/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com