QLabel中的QSS和Rich文本在设置字体大小时的奇怪行为。

问题描述 投票:0回答:1

我想把一个QLabel的字体重量设置为200(light),为此我尝试了QSS和Rich Text。

1. QSS

我试着使用QSS为一个qlabel设置字体家族和字体大小,但文本仍然是普通字体大小(即400),然而当字体大小超过400时,权重就会像预期的那样。

您可以在这里看到,字体重量200

和font-weight 400没有区别。

而字体重量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时,Rich Text成功地产生了预期的输出。之前 富文本一。

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(light)这样一个相对简单的任务。

  • PyQt5版本5.12
  • Win 10 x64
python pyqt pyqt5 qtstylesheets qlabel
1个回答
0
投票

作为一个变通方法,我初始化了一个额外的空QLabel对象,并在添加其他部件之前将其添加到基本布局中。这有助于实现预期的行为,但我仍然不知道为什么一开始就有这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.