PyQt:使用setRect()

时间:2017-02-24 13:08:28

标签: python pyqt

我正在第一次拍摄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()明确设置位置之间的区别是什么?

1 个答案:

答案 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)。