Python PyQt:使用setRect()控制QGraphicsRectItem的位置
我第一次尝试PyQT,是为了最终创建一些数据的基本图形表示。Python PyQt:使用setRect()控制QGraphicsRectItem的位置,python,pyqt,Python,Pyqt,我第一次尝试PyQT,是为了最终创建一些数据的基本图形表示。 我目前正在尝试在QGraphicsRectItem中框选两个QGraphicsTextItem,我对看到的一些结果有一些疑问 class MyRect(QGraphicsRectItem): def __init__(self, parent = None): super(MyRect, self).__init__(parent) self.text_item = QGraphicsTe
我目前正在尝试在
QGraphicsRectItem
中框选两个QGraphicsTextItem
,我对看到的一些结果有一些疑问
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")
上述情况产生了以下结果:这不是我想要的。
经过更多的实验,我发现改变这一点:
self.setRect(50, 50, width, height)
为此:
self.setRect(0, 0, width, height)
self.setPos(50, 50)
成功了:怎么会?
使用
setRect()
设置矩形的位置与使用setPos()
显式设置位置之间有什么区别 不同之处在于函数是根据不同的坐标系定义的。根据文档,setPos()
定义了矩形在其父坐标系统中的位置,而setRect()
定义了矩形在其自身局部坐标系统中的位置和大小。因此setPos()
的(x,y)
和setRect()
的(x,y)
没有相同的含义
使用
setPos(50,50)
,您的意思是矩形局部坐标系的原点位于(50,50)
位置,在qgraphicscene
的坐标系中(其父坐标系)。然后使用setRect(0,0,宽度,高度)
,你说矩形位于原点(0,0)
,在它自己的坐标系中(实际上是场景坐标系中的(50,50)
)。这是一个老生常谈的问题,但它可能会帮助某些人。我自己也在学习PyQt,最近也遇到了同样的问题。