Как частично изменить цвет фона виджета?
Я знаю, как изменять цвет фона виджета полностью, а можно ли как-то менять цвет фона частично?
Например цвет верхней четверти, как на картинке ниже.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QWidget(self)
self.setCentralWidget(self.central_widget)
self.central_widget.setAttribute(Qt.WA_StyledBackground, True)
self.central_widget.setStyleSheet('background-color: yellow')
self.layout_main_window = QVBoxLayout()
self.central_widget.setLayout(self.layout_main_window)
self.layout_main_window.addWidget(QLabel('Строка 1'))
self.layout_main_window.addWidget(QLabel('Строка 2'))
self.layout_main_window.addWidget(QLabel('Строка 3'))
self.layout_main_window.addWidget(QLabel('Строка 4'))
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
Сейчас так:
А нужно примерно вот так:
UPD: Речь именно о виджетах, а не об окне в целом, в окне таких цветных квадратиков может быть несколько и мне каждый из них нужно покрасить в два цвета:
Ответы (1 шт):
Я не уверен, что правильно понимаю то, что вы хотите делать. Но попробуйте так:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QWidget(self)
self.setCentralWidget(self.central_widget)
self.central_widget.setAttribute(Qt.WA_StyledBackground, True)
self.central_widget.setStyleSheet('background-color: yellow')
self.label = QLabel() # +++
self.label.setStyleSheet('background-color: green') # +++
self.layout_main_window = QVBoxLayout()
self.central_widget.setLayout(self.layout_main_window)
self.layout_main_window.setContentsMargins(0, 0, 0, 0)
self.layout_main_window.addWidget(self.label, alignment=Qt.AlignTop) # +++
self.layout_main_window.addWidget(QLabel('Строка 1'))
self.layout_main_window.addWidget(QLabel('Строка 2'))
self.layout_main_window.addWidget(QLabel('Строка 3'))
self.layout_main_window.addWidget(QLabel('Строка 4'))
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
Update:
довольно хорошее и простое решение, но тогда теряется одна строчка полезного места, занятого новой QLabel.
А хотелось бы, чтобы именно часть виджета, которая была желтого цвета, становилась зеленой, пусть даже надпись "Строка 1" теперь будет на зеленом фоне
Попробуйте так:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QWidget(self)
self.setCentralWidget(self.central_widget)
self.central_widget.setAttribute(Qt.WA_StyledBackground, True)
self.central_widget.setStyleSheet('background-color: yellow')
self.layout_main_window = QVBoxLayout()
self.central_widget.setLayout(self.layout_main_window)
self.layout_main_window.setContentsMargins(0, 0, 0, 0)
self.label_1 = QLabel('\n\nСтрока 1')
self.label_1.setStyleSheet("""
background: qlineargradient(
spread:pad,
x1:0.22, y1:0.5,
x2:0.22, y2:0,
stop:0 rgba(255, 255, 0, 255),
stop:1 rgba(255, 0, 0, 255));
""")
self.layout_main_window.addWidget(self.label_1, 1)
self.layout_main_window.addWidget(QLabel('Строка 2'), 1)
self.layout_main_window.addWidget(QLabel('Строка 3'), 1)
self.layout_main_window.addWidget(QLabel('Строка 4'), 1)
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())




