11

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

任何帮助,将不胜感激。

4

2 回答 2

19

QLabel没有setIcon方法,但有setPixmap. 但是,如果您使用它来设置 aQPixmap它会覆盖您的文本。但是有几种可能性可以实现您想要的:

  • 使用 html-capabilitiesQLabel显示文本+图像
  • 使用两个标签,一个带有文本,一个带有图像
  • 自己绘制组件
于 2012-05-13T20:06:59.657 回答
2

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

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()

我正在使用QtAwesome获取所需的图标。

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

mylayout.addWidget(IconLabel("fa.scissors", "Slicer Limit:"))

它看起来像什么:

在此处输入图像描述

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

于 2020-10-09T11:42:13.553 回答