Почему исчезает 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')
#...
