布局结构:
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 ....
QXLayout不是视觉元素,而是一个类,它控制分配的小部件的位置,尤其是大小。因此,想要为不是视觉元素的类设置颜色是没有道理的。