更改 QLabel 的形状

Posted

技术标签:

【中文标题】更改 QLabel 的形状【英文标题】:Change the shape of a QLabel 【发布时间】:2019-05-05 16:27:35 【问题描述】:

我需要一点帮助,我正在尝试生成一个聊天室,但我希望用于显示消息的 QLabel 具有像这样的消息容器的形式

不仅是 QLabel 的典型方形

我尝试执行以下操作:

def CreateLabel(self):
    image = QtGui.QPixmap("container.png")
    mask = image.createMaskFromColor(QtCore.Qt.red)

    self.Label = QLabel()
    self.Label.setText("Test Text")
    self.Label.setAlignment(QtCore.Qt.AlignRight)
    self.Label.setMask(mask)

【问题讨论】:

【参考方案1】:

试试看:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui     import *
from PyQt5.QtCore    import *


class Label(QLabel):
    def __init__(self, text):
        super().__init__()

        self.text = text

        self.im = QImage('D:/_Qt/img/chat.png')
        self.resize(self.im.size())

    def paintEvent(self, event):
        super().paintEvent(event)

        p = QPainter(self)
        p.drawImage(0, 0, self.im)

        self.drawText(event, p)                                 

    def drawText(self, event, p):
        p.setPen(QColor(168, 34, 4))
        p.setFont(QFont('Decorative', 12))
        p.drawText(event.rect(), Qt.AlignTop, self.text) 

    def closeEvent(self, event):
        quit()


class Widget(QWidget):
    def __init__(self):
        super().__init__()

        self.text = """
                        How to draw a QLabel with chat image.
                    I would like a little help, I am trying to generate a chat 
                    room but I would like that the QLabel that I use to show 
                    the messages had the form of a message container like this.
                    """        

        self.label = Label(self.text)
        self.label.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Widget()
#    w.show()
    app.exec_()

【讨论】:

以上是关于更改 QLabel 的形状的主要内容,如果未能解决你的问题,请参考以下文章

动态更改文本 qlabel

在 Qt 上使用看门狗更改 QLabel 文本

如何根据选择更改 QLabel 的背景颜色

悬停在 QLabel 中时如何临时更改链接的颜色?

不能在一个槽中两次更改 QLabel 文本

Python PyQt5:如果 QLineEdit 为空,如何更改 QLabel 的颜色?