我正在尝试通过编写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
答案 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