2017-09-24 8 views
1

私はゴーゲームの実装を書いて自分自身にパイソンを教えようとしています。 ストーンのためのカスタムQGrapicsItemを作成したいと思います。私のカスタムQGraphicsItemが意図した座標に表示されないのはなぜですか?

現時点では、指定された座標(テスト)を中心とした円のみを描画します。 何らかの理由で、アイテムがシーンの異なる座標に表示されます。 違う言い方をすれば、ボード上の線のグリッドをシーンに描画し、グリッドに使用したのと同じ座標で私の石のアイテムを呼び出すが、それは意図したグリッドポイントに現れない。

StoneItemのための私のコード:コード全体がhttps://github.com/drseilzug/GoGote/blob/master/GoGote/BoardGUI.py

で発見することができ、より状況については

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()) 

私はまだPyQt5にかなり新しいだと私は理解するのに役立ちます説明と解決策私が間違っていたところは、とても感謝しています。

は、私は私の誤りを見つけた drseilzug

答えて

2

、ありがとうございます。

問題は、QRectF Objectsのパラメータをどのように解釈するのか誤解していました。私は、4つの浮きは、実際には最初のセットが確かに最上のコーナーであるが、後の2つは長方形の寸法を与えるときに、上端コーナーと右下コーナーの座標であると思った。

問題が

def boundingRect(self): 
    rect = QRectF(-self.rad, -self.rad, 
        2*self.rad, 2*self.rad) 
    return rect 
にboundingRectを変更することで修正されました
関連する問題