为什么我的Custom QGraphicsItem没有显示在预期的坐标上?

时间:2017-09-24 20:36:01

标签: python position pyqt5 qgraphicsitem

我正在尝试通过编写Go Game实现自学python。 我想为Stones制作一个自定义的QGrapicsItem。

此刻它只画一个以给定坐标为中心的圆圈(测试)。 但由于某种原因,该项目出现在我的场景中的不同坐标上。 不同的意思是,我已经为电路板绘制了一个网格线到场景中,并使用我用于网格的相同坐标调用我的Stone项目,但它没有出现在预期的网格点上。

我的StoneItem代码:

from PyQt5.QtWidgets import QGraphicsItem
from PyQt5.QtCore import QRectF

class Stone(QGraphicsItem):
    """
    A Go stone QGraphicsItem
    x, y :: center Coords of Stone
    rad :: radius
    color:: the stone type
        0, self.empty :: empty
        1, self.black :: black
        2, self.white :: white
    """
    empty = 0
    black = 1
    white = 2

    def __init__(self, x, y, rad, color):
        super().__init__()

        self.x = x
        self.y = y
        self.rad = rad
        self.color = color
        self.setPos(x, y)

    def boundingRect(self):
        rect = QRectF(-self.rad, -self.rad,
                      self.rad, self.rad)
        return rect

    def paint(self, painter, *args, **kwargs):
        painter.drawEllipse(self.boundingRect())

有关更多上下文,可以在https://github.com/drseilzug/GoGote/blob/master/GoGote/BoardGUI.py

找到整个代码

我仍然是PyQt5的新手,并且有一个解释方案可以帮助我理解,在哪里出错我会非常感激。

谢谢你, drseilzug

1 个答案:

答案 0 :(得分:2)

我发现了我的错误。

问题是,我误解了如何解释QRectF Objects参数。我认为4个浮点数是topleft corner和right right corner的坐标,实际上第一个集合确实是topleft的角落,而后两个则给出了矩形的尺寸。

通过将boundingRect更改为

来解决此问题
def boundingRect(self):
    rect = QRectF(-self.rad, -self.rad,
                  2*self.rad, 2*self.rad)
    return rect