Pyside Qt在QGraphicsItem中对齐QLabel代理小部件

时间:2017-07-24 09:59:07

标签: python qt4 pyside

我想用矩形对象编写一个简单的块方案,用一些文本填充。对于块我使用QGraphicsItem(父),矩形中的文本是QLabel的代理,QLabel被设置为QGraphicsItem的子代。

class Node(QtGui.QGraphicsItem):
Type = QtGui.QGraphicsItem.UserType + 1

def __init__(self, scene, parent=None):
    QtGui.QGraphicsItem.__init__(self, scene=scene, parent=parent)

    self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
    self.setFlag(QtGui.QGraphicsItem.ItemSendsGeometryChanges)
    self.setCacheMode(self.DeviceCoordinateCache)
    self.setZValue(-1)

    self.width = 100
    self.height = 50

    textLabel = QtGui.QLabel('B1')
    textLabel.setAlignment(QtCore.Qt.AlignCenter) # This doesn't do shit
    proxyText = self.scene().addWidget(textLabel)
    proxyText.setParentItem(self)

我在QGraphicsSimpleTextItem上选择了QLabel,因为我应该能够为标签设置文本的对齐方式。但它不起作用。对齐仍然是Left | Up

1 个答案:

答案 0 :(得分:0)

事实证明,一个简单的几何结构可以解决这个问题:

class Node(QtGui.QGraphicsItem):
    Type = QtGui.QGraphicsItem.UserType + 1

def __init__(self, scene, parent=None):
    QtGui.QGraphicsItem.__init__(self, scene=scene, parent=parent)

    self.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
    self.setFlag(QtGui.QGraphicsItem.ItemSendsGeometryChanges)
    self.setCacheMode(self.DeviceCoordinateCache)
    self.setZValue(-1)

    self.width = 100
    self.height = 50

    textLabel = QtGui.QLabel('B1')
    textLabel.setAlignment(QtCore.Qt.AlignCenter) # This doesn't do shit on its own

    textLabel.setGeometry(
        -self.width / 2, 
        -self.height / 2, 
        self.width, 
        self.height) # It needs a frame of reference

    proxyText = self.scene().addWidget(textLabel)
    proxyText.setParentItem(self)