在QLabel中显示标准图标和文本

Ram*_*mar 8 pyqt qlabel

我想QLabel在pyqt中显示标准警告图标以及一些描述文本.Qlabel没有setIcon功能.那我该怎么办呢?

任何帮助,将不胜感激.

mat*_*ata 12

QLabel没有setIcon方法,但它有setPixmap.但如果您使用它来设置QPixmap它会覆盖您的文本.但是有一些可能实现你想要的东西:

  • 使用html-capabilities QLabel来显示文本+图像
  • 使用两个标签,一个带文字,一个带图像
  • 自己绘制组件

  • 这意味着只需添加一个指向图像的`<img>`标签(`QLabel("<html> <img rel="nofollow noreferrer" src ='/ path/to/my_image.png'> </ html>"))或图像[资源]你在`.qrc`中定义的(http://qt-project.org/doc/qt-5/resources.html)(`QLabel("<html> <img rel="nofollow noreferrer" src =':/ my_image.png'> </HTML>")`) (6认同)
  • 因为通过上面的 [`&lt;img&gt;` hack](/sf/ask/737368691/ icon-and-text-in-qlabel#comment37584016_10574811),令人失望(如果不出所料)`QLabel` 不支持开箱即用的此类功能。为什么`setPixmap()` 和`setText()` 被迫相互排斥,当两者可以以明显的方式简单地合作时(例如,通过预先或附加带有`&lt;img&gt;`-wrapped 的文本)富文本模式下的像素图)? (4认同)
  • 您是否介意添加一个示例,说明如何"使用QLabel的html功能来显示文本+图像"? (2认同)

shr*_*eer 6

我知道我参加聚会有点晚了,但这是我解决这个问题的方法:

import qtawesome as qta
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class IconLabel(QWidget):

    IconSize = QSize(16, 16)
    HorizontalSpacing = 2

    def __init__(self, qta_id, text, final_stretch=True):
        super(QWidget, self).__init__()

        layout = QHBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(layout)

        icon = QLabel()
        icon.setPixmap(qta.icon(qta_id).pixmap(self.IconSize))

        layout.addWidget(icon)
        layout.addSpacing(self.HorizontalSpacing)
        layout.addWidget(QLabel(text))

        if final_stretch:
            layout.addStretch()

Run Code Online (Sandbox Code Playgroud)

我用来QtAwesome获取所需的图标。

现在您可以轻松地将图标标签插入到您自己的 PyQt5 布局中。例子。

mylayout.addWidget(IconLabel("fa.scissors", "Slicer Limit:"))
Run Code Online (Sandbox Code Playgroud)

它看起来像什么:

在此输入图像描述

请注意,我包含了一个选项final_stretch。在垂直布局中,您需要保持final_stretch = True正确的左对齐(参见上图)。然而,在水平布局中(即,IconLabels在同一行中彼此相邻放置多个时),您可能需要进行设置final_stretch = False以节省空间。