首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有合适的方法来孵化QLabel吗?

有合适的方法来孵化QLabel吗?
EN

Stack Overflow用户
提问于 2022-05-17 07:38:11
回答 1查看 87关注 0票数 0

正如标题中所述,我想知道是否有一种正确的方法来孵化QLabel,在我的例子中,这是QRect的几何结构,正如您在代码中看到的那样。

我检查了文档,但是我不知道我怎么能孵化出QLabel

下面是QLabel将如何处理孵化的图像(不同的选项):

注意:我不打算加载QPixmap,我正在寻找更整洁的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-17 11:25:28

您可以重写QLabelpaintEvent,并将QBrush与预定义的BrushStyle 模式一起使用,也可以将模式定义为微小的像素映射,并将其用作QBrush

如果您需要在文本顶部(作为前台)上的模式,在绘制之前调用super().paintEvent(event),如果您需要在文本下面(作为背景)调用super().paintEvent(event)

代码语言:javascript
复制
from PyQt5 import QtWidgets, QtGui, QtCore

class LabelStandardPattern(QtWidgets.QLabel):

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.save()
        painter.setPen(QtCore.Qt.NoPen)
        painter.setBrush(QtGui.QBrush(QtCore.Qt.Dense6Pattern))
        painter.drawRect(self.rect())
        painter.restore()
        super().paintEvent(event)


class LabelUserPattern(QtWidgets.QLabel):

    def __init__(self, text="", parent = None):
        super().__init__(text, parent)
        image = QtGui.QImage(5,5, QtGui.QImage.Format_ARGB32)
        image.fill(QtCore.Qt.transparent)
        painter = QtGui.QPainter(image)
        painter.drawLine(0,0,2,2)
        self._brush = QtGui.QBrush(image)
        self._image = image

    def paintEvent(self, event):
        
        painter = QtGui.QPainter(self)
        painter.save()
        painter.setPen(QtCore.Qt.NoPen)
        painter.setBrush(self._brush)
        painter.setRenderHint(QtGui.QPainter.Antialiasing, False)
        painter.drawRect(self.rect())
        painter.restore()
        super().paintEvent(event)

if __name__ == "__main__":
    app = QtWidgets.QApplication([])

    palette = app.palette()
    palette.setColor(QtGui.QPalette.Foreground, QtGui.QColor(QtCore.Qt.blue))

    label1 = LabelStandardPattern("Standard Pattern")
    label1.setPalette(palette)
    label1.setFont(QtGui.QFont("Arial", 20))
    
    label2 = LabelUserPattern("User Pattern")
    label2.setPalette(palette)
    label2.setFont(QtGui.QFont("Arial", 20))
    
    widget = QtWidgets.QWidget()
    layout = QtWidgets.QVBoxLayout()
    layout.addWidget(label1)
    layout.addWidget(label2)
    widget.setLayout(layout)
    widget.show()

    app.exec()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72269936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档