在运行时将小部件添加到嵌套布局中

问题描述 投票:1回答:1

我一直在尝试制作一个小的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)

有人知道为什么这在嵌套布局中不起作用吗?

python pyqt pyqt5 qpushbutton qlayout
1个回答
0
投票

如果要向另一个布局添加布局,则必须使用addLayout()方法,否则代码将失败,因为您使用的是需要QLayoutItem的addItem()。

解决方案是使用addLayout()更改addItem():

self.widget_layout.addWidget(self.btn)
self.widget_layout.addLayout(self.button_layout)
self.setLayout(self.widget_layout)
© www.soinside.com 2019 - 2024. All rights reserved.