Я видел несколько уроков (и даже постов SE), где QLabel используется как холст для рисования вещей. Если вы начнете копаться в документах Qt5 , они предполагают, что использование системы QGraphicsView / QGraphicsScene - это хороший способ рисовать на холсте. Я не буду лгать: есть некоторые издержки, чтобы выяснить, как использовать все вместе, но система довольно мощная, и вы можете сделать красивую графику таким образом из всех видов примитивов.
Если вам нужно что-то маленькое и простое, использование QLabel и PaintEvent неплохо. Но если в вашем приложении много графики, я бы порекомендовал QGraphicsView.
Вот простой пример рисования двух фрагментов текста в QGraphicsView. Во-первых, мы не устанавливаем позицию, поэтому по умолчанию (0,0) верхний левый угол. Вторая рисуется в (50,50)
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget,
QGraphicsView, QGraphicsScene,
QGraphicsSimpleTextItem, QGridLayout)
import sys
class DemoApp(QMainWindow):
def __init__(self, parent=None):
super(DemoApp, self).__init__()
# set up the layout for the MainWindow.
grid_layout = QGridLayout()
self.graphicsView = QGraphicsView()
grid_layout.addWidget(self.graphicsView)
widget = QWidget()
widget.setLayout(grid_layout)
self.setCentralWidget(widget)
scene = QGraphicsScene()
self.graphicsView.setScene(scene)
mytext1 = QGraphicsSimpleTextItem('the first label')
scene.addItem(mytext1)
mytext2 = QGraphicsSimpleTextItem('the second label')
scene.addItem(mytext2)
mytext2.setPos(50,50)
app = QApplication(sys.argv)
demo_app = DemoApp(None)
demo_app.show()
sys.exit(app.exec_())
Есть несколько примеров для QGraphicsView, которые поставляются с PyQt5, в частности, «dragdroprobot.py»