Почему исчезает label_1 когда я применяю self.setStyleSheet('background:red;')?

Я создал два label и решил центрировать их с помощью QGridLayout Но почему то когда я применяю self.setStyleSheet('background:red;') то label_1 исчезает. Можно ли это как то исправить?

Мне нужно что бы и self.setStyleSheet('background:red;') работал и два labels было видно Использовать просто setGeometry не подходит так как мне нужно динамическое центрирование.

import sys
from PyQt5 import QtWidgets, QtCore, QtGui

class Test(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)
        
        self.setStyleSheet('background:red;')
        
        lay = QtWidgets.QGridLayout(self)
        lay.setSpacing(0)
        lay.setContentsMargins(0, 0, 0, 0)
        
        label_1 = QtWidgets.QLabel(self)
        label_1.setText("-")
        label_1.setStyleSheet('font-size:100px')
        label_1.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        lay.addWidget(label_1, 0,0,1,1)
        
        label_2 = QtWidgets.QLabel(self)
        label_2.setText("|")
        label_2.setStyleSheet('font-size:100px')
        label_2.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
        lay.addWidget(label_2, 0,0,1,1)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Test()
    w.show()
    sys.exit(app.exec_())

Ответы (2 шт):

Автор решения: S. Nick

ваш вопрос как всегда не обычный, но он также имеет решение.

import sys
from PyQt5 import QtWidgets, QtCore, QtGui

class Test(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500, 500)
        self.setStyleSheet('background: red;')        
        
        lay = QtWidgets.QGridLayout(self)
        lay.setSpacing(0)
        lay.setContentsMargins(0, 0, 0, 0)
        
        label_1 = QtWidgets.QLabel(self)
        label_1.setText("-")
        label_1.setStyleSheet('font-size: 100px;')
        label_1.setAlignment(QtCore.Qt.AlignCenter)
        lay.addWidget(label_1, 1, 0, 1, 3)
        
        label_2 = QtWidgets.QLabel(self)
        label_2.setText("|")
        label_2.setFixedWidth(8)
        label_2.setStyleSheet('font-size: 100px;')
        label_2.setAlignment(QtCore.Qt.AlignCenter)
        lay.addWidget(label_2, 0, 1, 3, 1)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Test()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка
Автор решения: Alexander Chernin

Почему так, пока не знаю - надо поэкспериментировать, а добиться желаемого эффекта можно так:

первой метке грида задать желаемый цвет фона, а последующим меткам задавать прозрачный фон

class Test(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        #...

        label_1 = QtWidgets.QLabel(self)
        label_1.setText("\\")

        # Желаемый цвет фона
        label_1.setStyleSheet('background-color:red; font-size:100px')
        #...

        label_2 = QtWidgets.QLabel(self)
        label_2.setText("|")

        # прозрачный фон в формате #AARRGGBB, 
        # здесь АА - это степень прозрачности от 0 - прозрачный, до FF - абсолютно не прозрачный
        label_2.setStyleSheet('background:#00000000; font-size:100px')
        #...

→ Ссылка