class RText(QObject): def __init__(self, text, x, y, size, color): self._pos = QPointF(x - 1.8, y + 1.8) super().__init__() self.text = QGraphicsTextItem(text) transform = QTransform.fromScale(0.3, -0.3) self.text.setTransformOriginPoint(self._pos) self.text.setTransform(transform) self.text.setPos(self._pos) # self.text.setRotation(-180) font = QFont("Times", 2) self.text.setFont(font) self._visible = 1 @pyqtProperty(int) def visible(self): return self._visible @visible.setter def visible(self, value): if value > 0: self.text.show() else: self.text.hide() self._visible = value
class MainWindow(QMainWindow): def __init__(self, parent=None): super().__init__(parent) self.view = VideoGraphicsView() self.setCentralWidget(self.view) self.view.videoItem.nativeSizeChanged.connect( self.handle_native_size_changed) url = QUrl( "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4" ) self.view.player.setMedia(QMediaContent(url)) self.view.player.play() self.resize(640, 480) self.text_item = QGraphicsTextItem(self.view.videoItem) self.text_item.setHtml( """<div style="color: #41CD52; font-weight: bold; font-size: 20px;">Qt is awesome</div>""" ) self.text_item.hide() self.animation = QVariantAnimation() self.animation.setDuration(1000) self.animation.setStartValue(QPointF(0.0, 0.0)) self.animation.setEndValue(QPointF(0.0, 0.0)) self.animation.valueChanged.connect(self.text_item.setPos) self.animation.finished.connect(self.start_of_start_animation) def handle_native_size_changed(self): self.start_of_start_animation() def start_of_start_animation(self): w = self.view.videoItem.size().width() - self.text_item.boundingRect( ).width() h = self.view.videoItem.size().height() - self.text_item.boundingRect( ).height() end_pos_x = random.uniform(0, w) end_pos_y = random.uniform(0, h) self.animation.setStartValue(self.animation.endValue()) self.animation.setEndValue(QPointF(end_pos_x, end_pos_y)) self.text_item.show() self.animation.start()