## Draw Hello World in random colour at random coords ```python #!/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() 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()) ``` ## p2: Use Font Metrics to Draw Multicoloured Text ![p2 example](pyside_p2.png) ```python #!/usr/bin/env python3 import random from PySide6.QtWidgets import * from PySide6.QtCore import * from PySide6.QtGui import * import sys class Wrap: def __init__(self,*xs,**kw): self.l = list(*xs,**kw) def __getitem__(self,i): return self.l[i%len(self.l)] 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.font = self.painter.font() self.font = QFont("Bitstream Charter",40) self.text = "Hello World!" self.letters = Wrap(self.text) self.i = 0 self.n = 0 self.linelength = 20 self.x0 = 10 self.x = self.x0 self.y0 = 10 self.y = self.y0 self.lsep = 5 s = QFontMetrics(self.font).size(Qt.TextSingleLine, "Xy") self.lh = s.height() + self.lsep self.y += self.lh 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): r,g,b,a = [random.randrange(0,256) for i in range(4)] self.penColor = QColor(r,g,b) self.painter.begin(self.pixmap) self.painter.setRenderHints(QPainter.Antialiasing, True) # paint here p = self.painter p.setPen(self.penColor) p.setFont(self.font) letter = self.letters[self.i] p.drawText(self.x,self.y,letter) s = QFontMetrics(self.font).size(Qt.TextSingleLine, letter) w = s.width() self.x += w self.i += 1 self.n += 1 if self.n >= self.linelength: self.n = 0 self.x = self.x0 self.y += self.lh 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()) ```