Установка значений Spacing и Margins по умолчанию для QBoxLayot в PyQt6

Как установить значения по умолчанию Spacing и Margins для всех контейнеров приложения?

В данный момент создание layouts выглядит примерно так:

layout1 = QHBoxLayout()
layout2 = QVBoxLayout()
....
layout15 = QHBoxLayout()

и каждому из них приходится устанавливать Spacing и Margins

layout1.setContentsMargins(0, 0, 0, 0)
layout2.setContentsMargins(0, 0, 0, 0)
....
layout15.setContentsMargins(0, 0, 0, 0)

layout1.setSpacing(0)
layout2.setSpacing(0)
....
layout15.setSpacing(0)

чувствую есть возможность не писать лишних 30 строк кода, но найти ее самостоятельно не могу.

В документации Qt есть сведение о том что стандартный размер отступов зависит от системы (и составляет для большинства систем 11рх), но не указанно как игнорировать это значение.


Ответы (1 шт):

Автор решения: S. Nick

Класс QBoxLayout выстраивает дочерние виджеты горизонтально или вертикально.

И выглядит это так:

import sys
from PyQt5.QtWidgets import * 


class BoxLayout(QBoxLayout):                                              # !!! 
    def __init__(self, *args, **kwargs):
        super(BoxLayout, self).__init__(*args, **kwargs)

        self.setContentsMargins(0, 0, 0, 0)                               # !!!
        self.setSpacing(0)                                                # !!!
        

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        
        layout = BoxLayout(QBoxLayout.LeftToRight)                        # QHBoxLayout
        self.setLayout(layout)
        
        label = QLabel("Label 1")
        label.setStyleSheet('background-color: #B52B65;')
        layout.addWidget(label, 0)
        
        label1 = QLabel("Label 2")
        label1.setStyleSheet('background-color: #ED6663;')
        layout.addWidget(label1, 0 )
        
        layout2 = BoxLayout(QBoxLayout.TopToBottom)                        # QVBoxLayout
        layout.addLayout(layout2)
        
        labe3 = QLabel("Label 3")
        labe3.setStyleSheet('background-color: #4E9F3D;')
        layout2.addWidget(labe3, 0)
        labe4 = QLabel("Label 4")
        labe4.setStyleSheet('background-color: #D8E9A8;')
        layout2.addWidget(labe4, 0)


if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка