добавление виджетов во вложенные макеты во время выполнения - PullRequest
1 голос
/ 07 ноября 2019

Я пытался создать небольшой скрипт pyqt, в который добавляются кнопки при нажатии кнопки. Работает как задумано, но только при добавлении кнопок в основной макет. Когда я пытаюсь добавить кнопки во вложенный макет, они не отображаются.

Пример рабочего кода:

class Example(QWidget):

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

        self.widget_layout = QVBoxLayout()

        self.btn = QPushButton('add button')
        self.btn.pressed.connect(self.add_button)

        self.widget_layout.addWidget(self.btn)
        self.setLayout(self.widget_layout)

        self.setGeometry(300, 300, 300, 300)
        self.show()

    def add_button(self):
        count = self.widget_layout.count()
        btn = QPushButton(str(count))
        self.widget_layout.addWidget(btn)

Пример кода, который не работает:

class Example(QWidget):

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

        self.widget_layout = QVBoxLayout()
        self.button_layout = QVBoxLayout()

        self.btn = QPushButton('add button')
        self.btn.pressed.connect(self.add_button)

        self.widget_layout.addWidget(self.btn)
        self.widget_layout.addItem(self.button_layout)
        self.setLayout(self.widget_layout)

        self.setGeometry(300, 300, 300, 300)
        self.show()

    def add_button(self):
        count = self.button_layout.count()
        btn = QPushButton(str(count+1))
        self.button_layout.addWidget(btn)

Кто-нибудь знает, почему это не работает во вложенном макете?

1 Ответ

0 голосов
/ 07 ноября 2019

Если вы хотите добавить макет в другой макет, тогда вы должны использовать метод addLayout (), вместо этого ваш код не работает, потому что вы используете addItem (), который ожидает QLayoutItem.

Решение состоит в том, чтобы изменитьaddItem () с addLayout ():

self.widget_layout.addWidget(self.btn)
<b>self.widget_layout.addLayout(self.button_layout)</b>
self.setLayout(self.widget_layout)
...