В общем, рисование QWidget (QLabel, QPushButton и др. c.) Должно выполняться только в методе paintEvent, как, кажется, знает OP. И это рисование зависит от информации, которую имеет виджет, например, QLabel использует текст, а dr aws текст, ИЛИ использует QPixmap и dr aws на основе этого растрового изображения. Таким образом, в этом случае вы должны создать QPixmap, где нарисована линия, и передать QPixmap в QLabel, чтобы нарисовать ее.
def setLabels(self, texttop, textbot):
pixmap = QPixmap(self.label_top.size())
pixmap.fill(Qt.transparent)
qp = QPainter(pixmap)
pen = QPen(Qt.red, 3)
qp.setPen(pen)
qp.drawLine(10, 10, 50, 50)
qp.end()
self.label_top.setPixmap(pixmap)
self.label_bot.setText(textbot)
Обновление:
У меня не может быть текста и нарисованной линии на ярлыке?
Как я уже указывал в начальной части моего ответа: либо вы рисуете текст или вы рисуете QPixmap, вы не можете сделать оба в QLabel.
Могу ли я нарисовать линию, а затем текст на нем, используя QPainter.drawText()
?
Да, Вы можете использовать все методы для рисования текста в QPixmap: будьте креативны :-). Например:
def setLabels(self, texttop, textbot):
pixmap = QPixmap(self.label_top.size())
pixmap.fill(Qt.transparent)
qp = QPainter(pixmap)
pen = QPen(Qt.red, 3)
qp.setPen(pen)
qp.drawLine(10, 10, 50, 50)
qp.drawText(pixmap.rect(), Qt.AlignCenter, texttop)
qp.end()
self.label_top.setPixmap(pixmap)
self.label_bot.setText(textbot)