PyQt5: не отображает Layout'ы

Разрабатываю симулятор парламентских голосований на Python с использованием PyQt5. К сожалению, столкнулся с проблемой, в которой программа не выдает ошибок, но код исполняется неправильно, вероятнее всего, ввиду неправильно построенной функции. Прошу помочь.

Фрагмент кода ниже должен выводить во фрейме данные в следующем виде:
<Название 1 партии> <Button 1-го депутата> <Button 2-го депутата> <Button 3-го депутата>
<Название 2 партии> <Button 4-го депутата> <Button 5-го депутата> <Button 6-го депутата> и т.д.

app.py

from PyQt5.QtGui import QColor, QPalette
from PyQt5.QtWidgets import QMainWindow, QApplication, QMessageBox, QWidget, QHBoxLayout, QLabel
from PyQt5.QtWidgets import QPushButton
import parliament_design as design
import sys
import ops

class MainWindow(QMainWindow, design.Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.voteButton.clicked.connect(self.vote_bill)
        parties = ops.get_all_parties()

        for x in parties:
            self.mandatesLayout.mandate_lay_widget = QWidget(self.gridLayoutWidget)
            self.mandatesLayout.mandate_layout = QHBoxLayout(self.mandatesLayout.mandate_lay_widget)
            self.mandatesLayout.mandate_layout.setObjectName("layoutParty_{}".format(x.id))
            self.mandatesLayout.addWidget(self.mandatesLayout.mandate_lay_widget)
            party_name = QLabel(x.name)
            self.mandatesLayout.mandate_layout.addWidget(party_name)
            senators = ops.get_all_senators()
            for y in senators:
                if y.party == x.id:
                    mandate_lay_widget = QWidget(self.gridLayoutWidget)
                    mandate_layout = QHBoxLayout(self.mandatesLayout.mandate_lay_widget)
                    self.mandatesLayout.mandate_layout.addWidget(mandate_lay_widget)
                    mandate = QPushButton(text="{}".format(y.name))
                    mandate.setStyleSheet("background-color:rgb({})".format(x.rgb_code))
                    mandate_layout.addWidget(mandate)


if __name__ == "__main__":
    ops.test_init()
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

parliament_design.py (для воспроизводимого примера)

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(740, 578)
        self.gridLayoutWidget = QtWidgets.QWidget(Form)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 290, 721, 271))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.mandatesLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.mandatesLayout.setContentsMargins(0, 0, 0, 0)
        self.mandatesLayout.setObjectName("mandatesLayout")
        self.frame = QtWidgets.QFrame(Form)
        self.frame.setGeometry(QtCore.QRect(430, 90, 301, 181))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.frame)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 301, 181))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 3, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.chooseBillList = QtWidgets.QComboBox(self.verticalLayoutWidget)
        self.chooseBillList.setWhatsThis("")
        self.chooseBillList.setObjectName("chooseBillList")
        self.verticalLayout.addWidget(self.chooseBillList)
        self.forRadio = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.forRadio.setObjectName("forRadio")
        self.verticalLayout.addWidget(self.forRadio)
        self.againstRadio = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.againstRadio.setObjectName("againstRadio")
        self.verticalLayout.addWidget(self.againstRadio)
        self.neutralRadio = QtWidgets.QRadioButton(self.verticalLayoutWidget)
        self.neutralRadio.setObjectName("neutralRadio")
        self.verticalLayout.addWidget(self.neutralRadio)
        self.voteButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.voteButton.sizePolicy().hasHeightForWidth())
        self.voteButton.setSizePolicy(sizePolicy)
        self.voteButton.setObjectName("voteButton")
        self.verticalLayout.addWidget(self.voteButton)
        self.newBillButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.newBillButton.setObjectName("newBillButton")
        self.verticalLayout.addWidget(self.newBillButton)
        self.formLayoutWidget = QtWidgets.QWidget(Form)
        self.formLayoutWidget.setGeometry(QtCore.QRect(10, 90, 411, 181))
        self.formLayoutWidget.setObjectName("formLayoutWidget")
        self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
        self.formLayout.setContentsMargins(0, 32, 0, 30)
        self.formLayout.setObjectName("formLayout")
        self.votedForDescLabel = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(True)
        font.setWeight(75)
        self.votedForDescLabel.setFont(font)
        self.votedForDescLabel.setObjectName("votedForDescLabel")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.votedForDescLabel)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.votedForLabel = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.votedForLabel.setFont(font)
        self.votedForLabel.setObjectName("votedForLabel")
        self.horizontalLayout.addWidget(self.votedForLabel)
        self.votedForStatusBar = QtWidgets.QProgressBar(self.formLayoutWidget)
        self.votedForStatusBar.setProperty("value", 0)
        self.votedForStatusBar.setObjectName("votedForStatusBar")
        self.horizontalLayout.addWidget(self.votedForStatusBar)
        self.formLayout.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout)
        self.votedAgainstDescLabel = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(True)
        font.setWeight(75)
        self.votedAgainstDescLabel.setFont(font)
        self.votedAgainstDescLabel.setObjectName("votedAgainstDescLabel")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.votedAgainstDescLabel)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.votedAgainstLabel = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.votedAgainstLabel.setFont(font)
        self.votedAgainstLabel.setObjectName("votedAgainstLabel")
        self.horizontalLayout_2.addWidget(self.votedAgainstLabel)
        self.votedAgainstStatusBar = QtWidgets.QProgressBar(self.formLayoutWidget)
        self.votedAgainstStatusBar.setProperty("value", 0)
        self.votedAgainstStatusBar.setObjectName("votedAgainstStatusBar")
        self.horizontalLayout_2.addWidget(self.votedAgainstStatusBar)
        self.formLayout.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_2)
        self.votedNeutralDescLabel = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(True)
        font.setUnderline(True)
        font.setWeight(75)
        self.votedNeutralDescLabel.setFont(font)
        self.votedNeutralDescLabel.setAutoFillBackground(False)
        self.votedNeutralDescLabel.setObjectName("votedNeutralDescLabel")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.votedNeutralDescLabel)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.votedNeutralLabel = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.votedNeutralLabel.setFont(font)
        self.votedNeutralLabel.setObjectName("votedNeutralLabel")
        self.horizontalLayout_3.addWidget(self.votedNeutralLabel)
        self.votedNeutralStatusBar = QtWidgets.QProgressBar(self.formLayoutWidget)
        self.votedNeutralStatusBar.setProperty("value", 0)
        self.votedNeutralStatusBar.setObjectName("votedNeutralStatusBar")
        self.horizontalLayout_3.addWidget(self.votedNeutralStatusBar)
        self.formLayout.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_3)
        self.commonSenatorsDescLabel = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setUnderline(True)
        self.commonSenatorsDescLabel.setFont(font)
        self.commonSenatorsDescLabel.setObjectName("commonSenatorsDescLabel")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.commonSenatorsDescLabel)
        self.senatorsAmountLabel = QtWidgets.QLabel(self.formLayoutWidget)
        self.senatorsAmountLabel.setObjectName("senatorsAmountLabel")
        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.senatorsAmountLabel)
        self.votedSenatorsAmountLabel = QtWidgets.QLabel(self.formLayoutWidget)
        font = QtGui.QFont()
        font.setUnderline(True)
        self.votedSenatorsAmountLabel.setFont(font)
        self.votedSenatorsAmountLabel.setObjectName("votedSenatorsAmountLabel")
        self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.votedSenatorsAmountLabel)
        self.senatorsVotedLabel = QtWidgets.QLabel(self.formLayoutWidget)
        self.senatorsVotedLabel.setObjectName("senatorsVotedLabel")
        self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.senatorsVotedLabel)
        self.countryNameLabel = QtWidgets.QLabel(Form)
        self.countryNameLabel.setGeometry(QtCore.QRect(10, 20, 711, 61))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.countryNameLabel.setFont(font)
        self.countryNameLabel.setObjectName("countryNameLabel")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.chooseBillList.setCurrentText(_translate("Form", "Выберите законопроект..."))
        self.chooseBillList.setPlaceholderText(_translate("Form", "Выберите законопроект..."))
        self.forRadio.setText(_translate("Form", "За"))
        self.againstRadio.setText(_translate("Form", "Против"))
        self.neutralRadio.setText(_translate("Form", "Воздержусь"))
        self.voteButton.setText(_translate("Form", "ГОЛОСОВАТЬ"))
        self.newBillButton.setText(_translate("Form", "ПРЕДЛОЖИТЬ ЗАКОНОПРОЕКТ"))
        self.votedForDescLabel.setText(_translate("Form", "ЗА"))
        self.votedForLabel.setText(_translate("Form", "0"))
        self.votedAgainstDescLabel.setText(_translate("Form", "ПРОТИВ"))
        self.votedAgainstLabel.setText(_translate("Form", "0"))
        self.votedNeutralDescLabel.setText(_translate("Form", "ВОЗДЕРЖАЛИСЬ"))
        self.votedNeutralLabel.setText(_translate("Form", "0"))
        self.commonSenatorsDescLabel.setText(_translate("Form", "Общее кол-во депутатов:"))
        self.senatorsAmountLabel.setText(_translate("Form", "0"))
        self.votedSenatorsAmountLabel.setText(_translate("Form", "Проголосовали:"))
        self.senatorsVotedLabel.setText(_translate("Form", "0"))
        self.countryNameLabel.setText(_translate("Form", "Парламент"))

Выдает такое окно, в котором почему-то кнопки депутатов совсем не отображаются.

Output


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

Автор решения: Bekhruz
        parties = ops.get_all_parties()
    for x in parties:
        self.mandatesLayout.mandate_lay_widget = QWidget(self.gridLayoutWidget)
        self.mandatesLayout.mandate_layout = QHBoxLayout(self.mandatesLayout.mandate_lay_widget)
        self.mandatesLayout.addWidget(self.mandatesLayout.mandate_lay_widget)
        party_name = QLabel(x.name + " ||")
        self.mandatesLayout.mandate_layout.addWidget(party_name)
        senators = ops.get_all_senators()
        for y in senators:
            if y.party.id == x.id:
                mandate = QPushButton(text="{}".format(y.name))
                mandate.setStyleSheet("background-color:rgb({})".format(x.rgb_code))
                self.mandatesLayout.mandate_layout.setAlignment(Qt.AlignLeading)
                self.mandatesLayout.mandate_layout.addWidget(mandate)

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

Проблема решена! Всем спасибо, коллеги!

→ Ссылка