PyQt: несколько QGridLayout

Как я могу иметь несколько QGridLayouts в одном виджете? Я хочу иметь один макет сетки слева и один справа.

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys

class FormWidget(QWidget):

    def __init__(self):
        super(FormWidget, self).__init__( )

        self.grid = QGridLayout(self)
        self.grid2 = QGridLayout(self)
        self.grid.addWidget(self.grid2)

    if __name__ == '__main__':

        app = QApplication(sys.argv)
        ex = FormWidget()
        sys.exit(app.exec_())

person user12314033    schedule 02.11.2019    source источник


Ответы (1)


Если вы хотите разместить 2 макета горизонтально, вы должны использовать QHBoxLayout:

import sys
from PyQt5.QtWidgets import QApplication, QGridLayout, QHBoxLayout, QWidget


class FormWidget(QWidget):
    def __init__(self, parent=None):
        super(FormWidget, self).__init__(parent)

        left_grid_layout = QGridLayout()
        right_grid_layout = QGridLayout()

        lay = QHBoxLayout(self)
        lay.addLayout(left_grid_layout)
        lay.addLayout(right_grid_layout)

        self.resize(640, 480)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = FormWidget()
    ex.show()
    sys.exit(app.exec_())

Обновление:

Если вы хотите установить вес, вы должны установить его в растяжке.

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QGridLayout, QHBoxLayout, QTextEdit, QWidget


class FormWidget(QWidget):
    def __init__(self, parent=None):
        super(FormWidget, self).__init__(parent)

        left_grid_layout = QGridLayout()
        right_grid_layout = QGridLayout()

        # for testing
        left_grid_layout.addWidget(QTextEdit())
        right_grid_layout.addWidget(QTextEdit())


        lay = QHBoxLayout(self)
        lay.addLayout(left_grid_layout, stretch=1)
        lay.addLayout(right_grid_layout, stretch=2)

        lay.setContentsMargins(
            0, # left
            100, # top
            0, # right
            100 # bottom
        )

        self.resize(640, 480)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    ex = FormWidget()
    ex.show()
    sys.exit(app.exec_())
person eyllanesc    schedule 03.11.2019
comment
Как сделать левый макет на 1/3 экрана, а правый макет на 2/3 экрана с верхней и нижней сеткой? - person user12314033; 03.11.2019