Pyqt4でqgraphicslayoutを作成しようとしています。私は一連のQGraphicsLayoutItemを持っていますが、スペーシングの代わりにレイアウトに積み重なっているようです。左側では、アイテムはすべて相互にオンタップされています。PyQt QGraphicsLayout Stacking
QGraphicsLayoutItemは、私は以下のクラスでそれをオーバーライド、抽象的なので:
class AttributeGFX(QtGui.QGraphicsLayoutItem):
"""Wrapper."""
def __init__(self,
n_x,
n_y,
n_scene,
n_settings,
n_name,
n_type,
n_io):
"""Init."""
super(AttributeGFX, self).__init__()
self.io = n_io
self.name = n_name
# Use same object for inputs and outputs
self.is_input = True
if "output" in n_io:
self.is_input = False
if self.is_input:
self.disp_settings = n_settings.display_settings['INPUTS']
else:
self.disp_settings = n_settings.display_settings['OUTPUTS']
if n_type not in self.disp_settings.keys():
self.disp_settings = self.disp_settings['default']
else:
self.disp_settings = self.disp_settings[n_type]
self.gitem = _AttributeGFX(n_x,
n_y,
n_scene,
n_settings,
n_name,
n_type,
n_io)
self.setGraphicsItem(self.gitem)
def sizeHint(self, z, sizeh):
"""Get the size."""
boundingrec = self.gitem.boundingRect()
r = QtCore.QSizeF()
r.setHeight(boundingrec.height())
r.setWidth(boundingrec.width())
return r
私は多分それはサイズヒントだと思ったので、私が代わりにQSizeFオブジェクトに大きな山車を試してみましたレイアウト項目内のグラフィック項目の境界を定めるrecの値。
何が起こっているのですか?以下はレイアウトを作成して項目を追加するところです。
class _GraphicsLayout (QtGui.QGraphicsWidget):
"""Provide structure for organizing elements."""
def __init__(self, spacing, parent):
"""Init."""
super(_GraphicsLayout, self).__init__(parent)
self.layout = QtGui.QGraphicsLinearLayout()
self.layout.setSpacing(spacing)
self.layout.setOrientation(QtCore.Qt.Vertical)
self.layout.addStretch()
self.setLayout(self.layout)
self.name = self.parentItem().name
self.items = {}
self.spacing = spacing
def add_item(self, item):
"""Add a new item to the layout and transform it into position."""
'''
trans = self.spacing * len(self.items) - 1 + item.height
item.setParentItem(self)
item.translate(0, trans)
'''
self.items[item.name] = item
self.layout.addItem(self.items[item.name])
self.layout.setSpacing(self.spacing)
EDIT:QGraphicsLayoutItemsにparentLayoutItemが印刷され、レイアウト内にあります。