QLabel 中设置字体粗细时 QSS 和富文本的奇怪行为

Posted

技术标签:

【中文标题】QLabel 中设置字体粗细时 QSS 和富文本的奇怪行为【英文标题】:Weird behavior of QSS and Rich text in QLabel while setting font-weight 【发布时间】:2020-05-06 18:11:20 【问题描述】:

我想将 QLabel 的字体粗细设置为 200(浅色),为此我尝试了 QSS 和富文本。

1。质量保证

我尝试使用 QSS 为 qlabel 设置 font-family 和 font-weight,但文本保持在 Normal font-weight(即 400),但是当 font-weight 高于 400 时,权重按预期响应。

你可以在这里看到 Font-weight 200

和Font-weight 400没有区别:

而 Font-weight 500 似乎会产生预期的结果:

代码:

import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
from PyQt5 import QtCore as qtc

class MainWindow(qtw.QMainWindow):

    def __init__(self):
        super().__init__()
        # Main UI code goes here
    
        stsheet2 = '''
        
        #label
            font-family: Segoe UI;
            font-size: 22pt;
            color: #525856;
            font-weight: 200;
        
        '''
        # Set window related properties
        self.setStyleSheet(stsheet2)

        self.label = qtw.QLabel("Sample Text")
        self.label.setObjectName("label")

        self.baseWidget = qtw.QWidget(self)
        self.baseLayout = qtw.QHBoxLayout()
        self.baseWidget.setLayout(self.baseLayout)
        self.setCentralWidget(self.baseWidget)

        self.baseLayout.addWidget(self.label)

        self.show()

if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec())

2。富文本

我使用的另一种方法是富文本。当我在带有富文本的 qlabel 之前将普通 qlabel 添加到布局中时,这种技术起作用并产生了浅色文本,但没有其他方式:

代码:

import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
from PyQt5 import QtCore as qtc

class MainWindow(qtw.QMainWindow):

    def __init__(self):
        super().__init__()
        # Main UI code goes here
        self.label = qtw.QLabel("Sample Text")
        self.label2 = qtw.QLabel("<span style=\"color: #525856; font-family: segoe ui; font-size:22pt; font-weight:200;\">Sample Text 2</span>")

        self.baseWidget = qtw.QWidget(self)
        self.baseLayout = qtw.QHBoxLayout()
        self.baseWidget.setLayout(self.baseLayout)
        self.setCentralWidget(self.baseWidget)

        self.baseLayout.addWidget(self.label)
        self.baseLayout.addWidget(self.label2)

        self.show()

if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec())

当普通 QLabel 添加到布局之前富文本之一时,富文本成功产生预期的输出。

import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
from PyQt5 import QtCore as qtc

class MainWindow(qtw.QMainWindow):

    def __init__(self):
        super().__init__()
        # Main UI code goes here
        self.label = qtw.QLabel("Sample Text")
        self.label2 = qtw.QLabel("<span style=\"color: #525856; font-family: segoe ui; font-size:22pt; font-weight:200;\">Sample Text 2</span>")

        self.baseWidget = qtw.QWidget(self)
        self.baseLayout = qtw.QHBoxLayout()
        self.baseWidget.setLayout(self.baseLayout)
        self.setCentralWidget(self.baseWidget)

        self.baseLayout.addWidget(self.label2)    # Notice the change
        self.baseLayout.addWidget(self.label)

        self.show()

if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec())

当普通 QLabel 添加到布局之后富文本之一时,富文本无法提供预期的输出。

QSS 和富文本的行为让我很困惑。有人可以解释为什么富文本会这样,为什么 QSS 似乎无法将字体粗细设置为 400 以下,最后,如何实现将字体粗细设置为 200(浅色)的相对简单的任务。

PyQt5 版本 5.12 Win 10 x64

【问题讨论】:

【参考方案1】:

作为一种解决方法,我初始化了一个额外的空 QLabel 对象并将其添加到基本布局中,然后再添加其他小部件。这有助于实现预期的行为,但我仍然不知道为什么会出现问题。

【讨论】:

以上是关于QLabel 中设置字体粗细时 QSS 和富文本的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在QLabel中设置文本占用区域的背景色?

关于QFont类中设置字体的一些函数

UILabel 在使用文本设置属性时显示自定义字体错误,但在代码中设置时工作正常

如何解析包含样式、颜色、字体系列、字体大小等 Html 标签的数据,并在 android 的 textview 中设置

防止在更改字体粗细时移动文本[重复]

如何在 QTextBrowser (Html) 中设置文本颜色? (PyQt)