class TAText2D(Rect2D): def __init__(self, text=None, doc=None, opacity=1., *args, **kwargs): if doc is not None and isinstance(doc, QTextDocument): self.doc = doc self.doc.setDocumentMargin( 0) # important so that the square is properly placed else: self.doc = QTextDocument() self.doc.setDocumentMargin( 0) # important so that the square is properly placed textOption = self.doc.defaultTextOption() textOption.setWrapMode(QTextOption.NoWrap) self.doc.setDefaultTextOption(textOption) if text is not None: self.doc.setHtml(text) self.isSet = True self.doc.adjustSize() size = self.getSize() super(TAText2D, self).__init__(0, 0, size.width(), size.height()) self.opacity = opacity def setText(self, html): self.doc.setHtml(html) self.doc.adjustSize() size = self.getSize() self.setWidth(size.width(), size.height()) def setDoc(self, doc): self.doc = doc self.doc.setDocumentMargin(0) self.doc.adjustSize() size = self.getSize() self.setWidth(size.width(), size.height()) def draw(self, painter): painter.save() painter.setOpacity(self.opacity) painter.translate(self.x(), self.y()) self.doc.drawContents(painter) painter.restore() painter.save() painter.setPen(QtCore.Qt.red) painter.drawRect(self) painter.restore() def boundingRect(self): return self def getSize(self): return self.doc.size() def getWidth(self): return self.boundingRect().width() def getHeight(self): return self.boundingRect().height() def setText(self, text): self.doc.setHtml(text) size = self.size() self.setWidth(size.width(), size.height()) def set_P1(self, *args): if not args: logger.error("no coordinate set...") return if len(args) == 1: self.moveTo(args[0].x(), args[0].y()) else: self.moveTo(QPointF(args[0], args[1])) def get_P1(self): return QPointF(self.x(), self.y()) def getPlainText(self): return self.doc.toPlainText() def getHtmlText(self): return self.doc.toHtml()