Установка значений 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_())
