设置字体粗细时 QLabel 中 QSS 和富文本的奇怪行为
Weird behavior of QSS and Rich text in QLabel while setting font-weight
我想将 QLabel 的字体粗细设置为 200(浅色),为此我尝试了 QSS 和 Rich Text。
1。 QSS
我尝试使用 QSS 为 qlabel 设置字体系列和字体粗细,但文本仍保持正常字体粗细(即 400),但是当字体粗细高于 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
- 赢得 10 x64
作为解决方法,我初始化了一个额外的空 QLabel 对象,并在添加其他小部件之前将其添加到基本布局。这有助于实现预期的行为,但我仍然不知道为什么会出现问题。
我想将 QLabel 的字体粗细设置为 200(浅色),为此我尝试了 QSS 和 Rich Text。
1。 QSS
我尝试使用 QSS 为 qlabel 设置字体系列和字体粗细,但文本仍保持正常字体粗细(即 400),但是当字体粗细高于 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
- 赢得 10 x64
作为解决方法,我初始化了一个额外的空 QLabel 对象,并在添加其他小部件之前将其添加到基本布局。这有助于实现预期的行为,但我仍然不知道为什么会出现问题。