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

阿努帕姆(Anupam Chakrawarti)

布局结构:

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()标签将显示在该深黄色背景上,并且我希望该背景部分为红色。

永乐

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

另一方面,由于以下两个代码等效而导致该错误:

x = QXLayout(w)
x = QXLayout()
w.setLayout(x)

在你的情况已经表明,布局“profileInfo”属于“面板中的”使用下面的代码:self.profileInfo = QGridLayout(self.panel),但你表示相同的布局属于“mainLayout”通过下面的代码:self.mainLayout.addLayout(self.profileInfo, 0, 0)因此,为避免警告,您必须通过将最后一个代码替换为self.mainLayout.addWidget(self.panel, 0, 0)

更新:

如果您希望某个小部件位于另一个小部件内,则它必须是第二个小部件的子级,因此“ fileInfo”必须是“ panel”的子级,但是由于您希望它占据父级的整个大小,因此您可以必须使用布局。

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.profileInfo = QGridLayout()

        """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()")

        self.panel = QWidget()

        """AddWidgets"""
        self.picLayout.addWidget(self.display)
        self.downloadBar.addWidget(self.download)
        self.redditSubs.addWidget(self.subs)
        self.profileInfo.addWidget(self.panel, 0, 0)

        lay = QVBoxLayout(self.panel)
        lay.addWidget(self.fileInfo)

        """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_()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android以编程方式将布局视图添加到另一个布局

来自分类Dev

使用LayoutInflater将布局添加到另一个布局时,抛出IllegalStateException

来自分类Dev

动态将布局添加到另一个布局

来自分类Dev

Android以编程方式将布局视图添加到另一个布局

来自分类Dev

动态将EditText从非子级布局添加到另一个LinearLayout

来自分类Dev

将视图从 MainActivity 添加到另一个 xml 文件布局

来自分类Dev

使用滚动视图将xml布局倍数添加到另一个xml中

来自分类Dev

使用布局作为另一个布局的背景

来自分类Dev

无法从活动访问另一个布局内的布局

来自分类Dev

如何从Sitecore中的另一个子布局访问子布局控件?

来自分类Dev

将数据从一个子布局发送到Sitecore中的另一个子布局

来自分类Dev

将包含另一个子布局的子布局从一个占位符移动到另一个占位符

来自分类Dev

如何从另一个活动更改布局背景?

来自分类Dev

在将MapFragment添加到相同布局的怪异行为后,在布局内部扩大视图

来自分类Dev

在将MapFragment添加到相同布局的怪异行为之后,在布局内部扩大视图

来自分类Dev

以编程方式在另一个布局之上添加一个布局

来自分类Dev

如何将XIB文件中的UIView作为子视图添加到另一个Xib文件

来自分类Dev

如何获取图像视图的clickevent,但是imageview在另一个布局中作为当前布局的标题

来自分类Dev

如何基于同一布局中的另一个窗口小部件将添加的窗口小部件放置到布局中?

来自分类Dev

将布局放在另一个居中的上方

来自分类Dev

将布局放在另一个之上

来自分类Dev

如何在线性布局(另一个线性布局的子级)中均匀分布视图?

来自分类Dev

如何在线性布局(另一个线性布局的子级)中均匀分布视图?

来自分类Dev

将stdin作为另一个文件添加到tar存档中

来自分类Dev

我可以将键盘布局添加到下一个Ubuntu版本吗?

来自分类Dev

如何在另一个布局之上添加布局?

来自分类Dev

setText在另一个布局中

来自分类Dev

在另一个布局android中查看viewpager

来自分类Dev

在另一个布局中获取 EditText 的值

Related 相关文章

  1. 1

    Android以编程方式将布局视图添加到另一个布局

  2. 2

    使用LayoutInflater将布局添加到另一个布局时,抛出IllegalStateException

  3. 3

    动态将布局添加到另一个布局

  4. 4

    Android以编程方式将布局视图添加到另一个布局

  5. 5

    动态将EditText从非子级布局添加到另一个LinearLayout

  6. 6

    将视图从 MainActivity 添加到另一个 xml 文件布局

  7. 7

    使用滚动视图将xml布局倍数添加到另一个xml中

  8. 8

    使用布局作为另一个布局的背景

  9. 9

    无法从活动访问另一个布局内的布局

  10. 10

    如何从Sitecore中的另一个子布局访问子布局控件?

  11. 11

    将数据从一个子布局发送到Sitecore中的另一个子布局

  12. 12

    将包含另一个子布局的子布局从一个占位符移动到另一个占位符

  13. 13

    如何从另一个活动更改布局背景?

  14. 14

    在将MapFragment添加到相同布局的怪异行为后,在布局内部扩大视图

  15. 15

    在将MapFragment添加到相同布局的怪异行为之后,在布局内部扩大视图

  16. 16

    以编程方式在另一个布局之上添加一个布局

  17. 17

    如何将XIB文件中的UIView作为子视图添加到另一个Xib文件

  18. 18

    如何获取图像视图的clickevent,但是imageview在另一个布局中作为当前布局的标题

  19. 19

    如何基于同一布局中的另一个窗口小部件将添加的窗口小部件放置到布局中?

  20. 20

    将布局放在另一个居中的上方

  21. 21

    将布局放在另一个之上

  22. 22

    如何在线性布局(另一个线性布局的子级)中均匀分布视图?

  23. 23

    如何在线性布局(另一个线性布局的子级)中均匀分布视图?

  24. 24

    将stdin作为另一个文件添加到tar存档中

  25. 25

    我可以将键盘布局添加到下一个Ubuntu版本吗?

  26. 26

    如何在另一个布局之上添加布局?

  27. 27

    setText在另一个布局中

  28. 28

    在另一个布局android中查看viewpager

  29. 29

    在另一个布局中获取 EditText 的值

热门标签

归档