lang/pysideex/ QPaintingTextExamples1


Draw Hello World in random colour at random coords

#!/usr/bin/env python3
import random

from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *
import sys

class MyWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.w, self.h = 680, 480
        self.setFixedSize(self.w,self.h)
        self.pixmap = QPixmap(self.size())
        self.pixmap.fill(Qt.white)

        self.painter = QPainter()
        self.text = "Hello World!"

    def paintEvent(self, event: QPaintEvent):
        with QPainter(self) as painter:
            painter.drawPixmap(0, 0, self.pixmap)

    def mousePressEvent(self, event: QMouseEvent):
        self.drawSomeText()

    def drawSomeText(self):
        x0 = random.randrange(0,self.w-100)
        y0 = random.randrange(0,self.h-100)

        r,g,b,a = [random.randrange(0,256) for i in range(4)]
        self.penColor = QColor(r,g,b)
        r,g,b,a = [random.randrange(0,256) for i in range(4)]
        self.brushColor = QColor(r,g,b,a)

        self.painter.begin(self.pixmap)
        self.painter.setRenderHints(QPainter.Antialiasing, True)

        # paint here
        p = self.painter
        f = p.font()
        f.setPixelSize(64)
        p.setFont(f)
        p.setPen(self.penColor)
        p.drawText(x0,y0,self.text)


        self.painter.end()
        self.update()

"""
QPainter painter(this);
painter.setPen(Qt::yellow);
painter.drawText(0, 20, "One");
painter.setPen(Qt::red);
painter.drawText(QFontMetrics(painter.font()).size(Qt::TextSingleLine, "One ").width(), 20, "Two");
"""

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)

        self.widget = MyWidget()
        self.setCentralWidget(self.widget)

if __name__ == "__main__":
    app = QApplication(sys.argv)

    w = MainWindow()
    w.show()
    sys.exit(app.exec())