将背景色添加到作为子布局的布局中(在另一个布局内部)

问题描述 投票:2回答:1

布局结构:

self.mainLayout = QGridLayout()
self.subLayout1 = QGridLayout()
self.subLayout2 = QVBoxLayout()
...
...
... 
self.mainLayout.addLayout(subLayout1,0,0)

我尝试过:

self.mainLayout = QGridLayout()
self.panel = QWidget()
self.subLayout1 = QGridLayout(self.panel) 
self.mainLayout.addLayout(subLayout1,0,0)
self.panel.setStylesheet("background-color: red;")
Error: QLayout::addChildLayout: layout "" already has a parent

这是我设置mainLayout颜色的方式

self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), Qt.black)
        self.setPalette(p)

显示subLayout1,subLayout2等时需要背面显示>

我该怎么做?

编辑:添加了MCVE(一个最小,完整,可验证的示例)

from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout
from PyQt5.QtCore import Qt


class Window(QMainWindow):

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.setWindowTitle('MCVE')

        '''Window Background'''
        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), Qt.darkYellow)
        self.setPalette(p)

        '''Core Layouts'''
        self.mainLayout = QGridLayout()
        self.picLayout = QHBoxLayout()
        self.redditSubs = QVBoxLayout()
        self.downloadBar = QHBoxLayout()
        self.panel = QWidget()
        self.profileInfo = QGridLayout(self.panel)

        '''Nested Layout'''
        self.mainLayout.addLayout(self.profileInfo, 0, 0)
        self.mainLayout.addLayout(self.picLayout, 0, 1)
        self.mainLayout.addLayout(self.redditSubs, 1, 0)
        self.mainLayout.addLayout(self.downloadBar, 1, 1)

        '''Widgets'''
        self.display = QLabel('QHBoxLayout()')
        self.download = QLabel('QHBoxLayout()')
        self.subs = QLabel('QVBoxLayout()')
        self.fileInfo = QLabel('QGridLayout()')

        '''AddWidgets'''
        self.picLayout.addWidget(self.display)
        self.downloadBar.addWidget(self.download)
        self.redditSubs.addWidget(self.subs)
        self.profileInfo.addWidget(self.fileInfo, 0, 0)

        '''Stylesheet'''
        self.panel.setStyleSheet("background-color: red;")

        '''Initiating  mainLayout '''
        self.window = QWidget()
        self.window.setLayout(self.mainLayout)
        self.setCentralWidget(self.window)


if __name__ == '__main__':
    app = QApplication([])
    w = Window()
    w.showNormal()
    app.exec_()

如上所述,代码错误QLayout :: addChildLayout:layout“”已经有一个父项,如果注释掉了Stylesheet部分,则QGridLayout()标签会显示在该深黄色背景之上,而我希望该背景部分为红色。

布局结构:self.mainLayout = QGridLayout()self.subLayout1 = QGridLayout()self.subLayout2 = QVBoxLayout()... ... ... self.mainLayout.addLayout(subLayout1,0,0)我已经尝试过:self ....

python pyqt pyqt5 qlayout
1个回答
2
投票

QXLayout不是视觉元素,而是一个类,它控制分配的小部件的位置,尤其是大小。因此,想要为不是视觉元素的类设置颜色是没有道理的。

© www.soinside.com 2019 - 2024. All rights reserved.