Python Pyqt5在小部件之间添加拉伸?

Python Pyqt5在小部件之间添加拉伸?,python,pyqt,pyqt5,qwidget,qlayout,Python,Pyqt,Pyqt5,Qwidget,Qlayout,我使用的是QVBox布局,布局中有两个小部件和一个动态布局“layout2”。Widget1固定在顶部,Widget3固定在底部,widget2是动态小部件。每次都会删除和添加布局2。这里的问题是,当layout2布局被删除时,我无法将widget3定位在底部。widget3移动到顶部。下面是示例代码 class Screen(QWidget): def __init__(self): super(Screen, self).__init__()

我使用的是QVBox布局,布局中有两个小部件和一个动态布局“layout2”。Widget1固定在顶部,Widget3固定在底部,widget2是动态小部件。每次都会删除和添加布局2。这里的问题是,当layout2布局被删除时,我无法将widget3定位在底部。widget3移动到顶部。下面是示例代码

class Screen(QWidget):
    def __init__(self):            
        super(Screen, self).__init__()

        self.main_layout = QVBoxLayout()
        widget1 = QPushButton("Text1")
        #self.widget2 = QWidget()
        widget3 = QLabel("Text3")
        self.widget2_layout = QHBoxLayout()
        widget2_label = QLabel("text2")
        self.widget2_layout.addWidget(widget2_label)
        #self.widget2.setLayout(self.widget2_layout)
        self.main_layout.addWidget(widget1,Qt.AlignTop)
        self.main_layout.addLayout(self.widget2_layout)
        self.main_layout.addWidget(widget3,Qt.AlignBottom)
        widget1.clicked.connect(self.change_widget2)    
        self.setLayout(self.main_layout)    
        self.show()

    def clearLayout(self,layout):
        item = layout.takeAt(0)
        while item:
            w = item.widget()
            if w:
                w.deleteLater()
            lay = item.layout()
            if lay:
                self.clearLayout(item.layout())
            item = layout.takeAt(0)
    def change_widget2(self):
        self.clearLayout(self.widget2_layout)
        self.widget2_layout = QHBoxLayout()
        widget2_label = QLabel("text changed")
        self.widget2_layout.addWidget(widget2_label)
        self.main_layout.addLayout(self.widget2_layout)

app = QApplication(sys.argv)
Gui = Screen()
sys.exit(app.exec_())

我尝试过添加拉伸、虚拟附加布局,但没有任何效果

如果您只想更改位于第二个位置的小部件,则无需删除或创建新布局,只需重新使用它,在下面的示例中,我们将看到小部件是如何更改的:

class Screen(QWidget):
    def __init__(self):
        super(Screen, self).__init__()
        self.setLayout(QVBoxLayout())

        widget1 = QPushButton("Text1", self)
        widget3 = QLabel("Text3", self)

        self.widget2_layout = QHBoxLayout()
        self.change_widget2()

        self.layout().addWidget(widget1)
        self.layout().addLayout(self.widget2_layout)
        self.layout().addWidget(widget3)

        widget1.clicked.connect(self.change_widget2)

    def clearLayout(self, layout):
        item = layout.takeAt(0)
        while item:
            w = item.widget()
            if w:
                w.deleteLater()
            lay = item.layout()
            if lay:
                self.clearLayout(item.layout())
            item = layout.takeAt(0)

    def change_widget2(self):
        self.clearLayout(self.widget2_layout)

        # change the widget.
        import random
        widgets = [QLabel, QLineEdit, QPushButton]
        widget2 = widgets[random.randint(0, len(widgets)-1)]("widget2", self)

        self.widget2_layout.addWidget(widget2)

据我所知,您希望动态更改widget2。我是对的?是的,动态地更改小部件,并将其放置在Widget1和widget3之间。为了简单起见,我在布局2中只添加了一个标签,但它有更多标签。非常感谢您您所说的位置是什么意思?小部件在布局中的放置位置或顺序。例如,Widget1布局2 Widget3非常感谢