Python Pyqt5在小部件之间添加拉伸?
我使用的是QVBox布局,布局中有两个小部件和一个动态布局“layout2”。Widget1固定在顶部,Widget3固定在底部,widget2是动态小部件。每次都会删除和添加布局2。这里的问题是,当layout2布局被删除时,我无法将widget3定位在底部。widget3移动到顶部。下面是示例代码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__()
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非常感谢