我正在第一次拍摄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")
以上产生此:
这不是我想要的。
经过一些实验,我发现改变了这个:
self.setRect(50, 50, width, height)
到此:
self.setRect(0, 0, width, height)
self.setPos(50, 50)
答案 0 :(得分:0)
区别在于功能是针对不同的坐标系定义的。根据文档,**event_code : fs_rev : hs_rev : pp_rev : mp_rev : gp_rev : in_rev : broker**
LAK180918 : 619500 : 0 : 7000 : 0 : 5000 : 8500 : 17500
定义了矩形在其父坐标的 系统中的位置,而setPos()
定义了矩形的位置和大小在 自己的本地坐标系 中。因此,setRect()
的{{1}}和(x,y)
的{{1}}的含义不相同。
对于setPos()
,您是说矩形的局部坐标系的原点位于(x,y)
(其父级)的坐标系中的位置setRect()
上。然后使用setPos(50, 50)
,您说矩形位于其自己的坐标系中的原点(50, 50)
(在场景坐标系中实际上为QGraphicsScene
)。