Quantcast
Channel: Active questions tagged qpainter - Stack Overflow
Viewing all articles
Browse latest Browse all 58

How to draw with QPainter on top of already placed QLabel or QPixmap?

$
0
0

While experimenting with Python and PyQt5 I got stuck on a problem. I have in my GUI few labels (QLabel) and images (QPixmap) and I want to draw something on them, depending on what the main program does. I can't figure out how though. For example, I change text on labels calling setLabels() from class BinColUI and I would like to draw something on them (i.e. QPainter.drawLine()) just after that. What I tried is not working, there's nothing drawn. My unsuccesful attempt is commented out in setLabels().How do I do it?

import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtGui import QPainter, QPenfrom PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidgetclass BinColUI(QMainWindow):    def __init__(self):        super().__init__()        self.initUi()        self.createLabelTop()        self.createLabelBot()    def initUi(self):        self.setWindowTitle('Bin Collection')        self.setFixedSize(500, 500)        # self.setStyleSheet('background-color: white')        self.generalLayout = QVBoxLayout()        self._centralWidget = QWidget(self)        self.setCentralWidget(self._centralWidget)        self._centralWidget.setLayout(self.generalLayout)    def paintEvent(self, event):        self.qp = QPainter()        self.qp.begin(self)        self.drawLine(event, self.qp)        self.qp.end()    def drawLine(self, event, qp):        pen = QPen(Qt.red, 3, Qt.SolidLine)        qp.setPen(pen)        qp.drawLine(5, 5, 495, 5)        qp.drawLine(495, 5, 495, 495)        qp.drawLine(495, 495, 5, 495)        qp.drawLine(5, 495, 5, 5)    def createLabelTop(self):        self.label_top = QLabel('PLEASE WAIT')        self.label_top.setAlignment(Qt.AlignCenter)        self.label_top.setFixedSize(450, 60)        self.label_top.setStyleSheet("font: 14pt Bahnschrift; color: black; background-color: yellow")        self.generalLayout.addWidget(self.label_top, alignment=Qt.AlignCenter)    def createLabelBot(self):        self.label_bot = QLabel('PLEASE WAIT')        self.label_bot.setAlignment(Qt.AlignCenter)        self.label_bot.setFixedSize(450, 60)        self.label_bot.setStyleSheet("font: 14pt Bahnschrift; color: black; background-color: yellow")        self.generalLayout.addWidget(self.label_bot, alignment=Qt.AlignCenter)    def setLabels(self, texttop, textbot):        # qp = QPainter(self.label_top)        self.label_top.setText(texttop)        self.label_bot.setText(textbot)        # pen = QPen(Qt.red, 3)        # qp.setPen(pen)        # qp.drawLine(10, 10, 50, 50)        # self.label_top.repaint()class BinColCtrl:    def __init__(self, view: BinColUI):        self._view = view        self.calculateResult()    def calculateResult(self):        line_top = 'NEW LABEL TOP'        line_bottom = 'NEW LABEL BOTTOM'        self._view.setLabels(line_top, line_bottom)def main():"""Main function."""    # Create an instance of `QApplication`    bincol = QApplication(sys.argv)    window = BinColUI()    window.show()    BinColCtrl(view=window)    sys.exit(bincol.exec_())if __name__ == '__main__':    main()

Viewing all articles
Browse latest Browse all 58

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>