我不明白如何在QLabel内绘制QPainter(),这是我告诉我可以使用的代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPainter, QColor, QBrush

class Labella(QLabel):

    def __init__(self, parent):
        super().__init__()

        lb = QLabel('text', parent)
        lb.setStyleSheet('QFrame {background-color:grey;}')
        lb.resize(200, 200)

        qp = QPainter(lb)
        qp.begin(lb);

        qp.setBrush(QColor(200, 0, 0))
        qp.drawRect(0,0,20,20);
        qp.end();


    def paintEvent(self, e):
        qp = QPainter()
        qp.begin(self)
        self.drawRectangles(qp)
        qp.end()

    def drawRectangles(self, qp):

        col = QColor(0, 0, 0)
        col.setNamedColor('#040404')
        qp.setPen(col)

        qp.setBrush(QColor(200, 0, 0))
        qp.drawRect(10, 15, 200, 60)


class Example(QWidget):

    def __init__(self):
        super().__init__()

        lb = Labella(self)

        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle('Colours')
        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


我只能在C ++中找到与Qt文档相同的示例,如果在此处找不到该信息,请指示我。

最佳答案

documentation建议在QPainter中使用paintEvent

通过使用如下构造函数,在方法paintEvent中,无需调用begin()end()

(您的Labella类仅缺少初始化父级的参数)

方法save()restore()可以方便地存储QPainter的标准配置,从而允许在恢复设置之前绘制不同的内容。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPainter, QColor, QBrush

class Labella(QLabel):

    def __init__(self, parent):
        super().__init__(parent=parent)

        self.setStyleSheet('QFrame {background-color:grey;}')
        self.resize(200, 200)

    def paintEvent(self, e):
        qp = QPainter(self)
        self.drawRectangles(qp)
        qp.setBrush(QColor(200, 0, 0))
        qp.drawRect(0,0,20,20)

    def drawRectangles(self, qp):
        qp.setBrush(QColor(255, 0, 0, 100))
        qp.save() # save the QPainter config

        qp.drawRect(10, 15, 20, 20)

        qp.setBrush(QColor(0, 0, 255, 100))
        qp.drawRect(50, 15, 20, 20)

        qp.restore() # restore the QPainter config
        qp.drawRect(100, 15, 20, 20)

class Example(QWidget):

    def __init__(self):
        super().__init__()

        lb = Labella(self)

        self.setGeometry(300, 300, 350, 300)
        self.setWindowTitle('Colours')
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

关于python - 如何在QLabel中使用QPainter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46043053/

10-11 23:09