Странное поведение QSS и Rich text в QLabel при установке font-weight - PullRequest
0 голосов
/ 06 мая 2020

Я хочу установить font-weight для QLabel равным 200 (светлый), и для этого я попробовал QSS и Rich Text.

1. QSS

Я попытался использовать QSS, чтобы установить семейство шрифтов и font-weight для qlabel, но текст остался с нормальным font-weight (т.е. 400), однако вес отвечал, как ожидалось, когда font-weight был выше 400.

Здесь вы можете увидеть, что Font-weight 200

and Font-weight 400 has no difference:

whereas Font-weight 500 seems to produce result as expected:

Code:

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. Rich Text

Another approach i used was Rich Text. This technique worked and produced light text when i added normal qlabel to the layout before the qlabel with rich text but not other way around:

Code:

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(" Sample Text 2") 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.exe c ()) 

Rich Text успешно производит ожидаемый результат при нормальном 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(" Пример текста 2") self.baseWidget = qtw.QWidget (self) self.baseLayout = qtw.QHBoxLayout ( ) self.baseWidget.setLayout (self.baseLayout) self.setCentralWidget (self.baseWidget) self.baseLayout.addW idget (self.label2) # Обратите внимание на изменение self.baseLayout.addWidget (self.label) self.show () if __name__ == '__main__': app = qtw.QApplication (sys.argv) mw = MainWindow () sys. exit (app.exe c ()) 

Rich Text не дает ожидаемого результата, когда обычный QLabel добавлен в макет после RTF.

Поведение QSS и Rich Text меня очень сбивает с толку. Может кто-нибудь объяснить, почему форматированный текст ведет себя таким образом, почему QSS, похоже, не может установить font-weight ниже 400 и, наконец, как выполнить относительно простую задачу установки font-weight на 200 (light).

  • PyQt5 версии 5.12
  • Win 10 x64

1 Ответ

0 голосов
/ 22 мая 2020

В качестве обходного пути я инициализировал дополнительный пустой объект QLabel и добавил его в базовый макет перед добавлением других виджетов. Это помогло добиться ожидаемого поведения, но я до сих пор не знаю, почему возникла проблема.

...