Python 在pyside中从QWidget取消设置布局
我在QWidget对象中设置新布局时遇到问题。当应用程序执行时,我开始设置一种布局类型,当按下按钮时,我想用新的布局来更改它。在PySide的文档中,我读到: 将此小部件的布局管理器设置为布局 如果此小部件上已安装布局管理器, PySide.QtGui.QWidget不允许您安装另一个。你必须先 删除现有布局管理器(由返回) PySide.QtGui.QWidget.layout()),然后才能调用 具有新布局的PySide.QtGui.QWidget.setLayout()Python 在pyside中从QWidget取消设置布局,python,layout,pyside,Python,Layout,Pyside,我在QWidget对象中设置新布局时遇到问题。当应用程序执行时,我开始设置一种布局类型,当按下按钮时,我想用新的布局来更改它。在PySide的文档中,我读到: 将此小部件的布局管理器设置为布局 如果此小部件上已安装布局管理器, PySide.QtGui.QWidget不允许您安装另一个。你必须先 删除现有布局管理器(由返回) PySide.QtGui.QWidget.layout()),然后才能调用 具有新布局的PySide.QtGui.QWidget.setLayout() 但是如何删除现有的
但是如何删除现有的布局管理器?我必须在QWidget对象上应用哪些方法 如果您是PySide/PyQt新手,请参阅文档中的文章,了解Qt布局系统的概述 对于您的特定示例,您将需要一种方法来递归地从布局中删除所有对象(即所有子窗口小部件、间隔项和其他布局)。以及构建和添加新布局的方法 下面是一个简单的演示:
from PySide import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
layout = QtGui.QVBoxLayout(self)
self.changeLayout(QtCore.Qt.Vertical)
self.button = QtGui.QPushButton('Horizontal', self)
self.button.clicked.connect(self.handleButton)
layout.addStretch()
layout.addWidget(self.button)
def handleButton(self):
if self.button.text() == 'Horizontal':
self.changeLayout(QtCore.Qt.Horizontal)
self.button.setText('Vertical')
else:
self.changeLayout(QtCore.Qt.Vertical)
self.button.setText('Horizontal')
def changeLayout(self, direction):
if self.layout().count():
layout = self.layout().takeAt(0)
self.clearLayout(layout)
layout.deleteLater()
if direction == QtCore.Qt.Vertical:
layout = QtGui.QVBoxLayout()
else:
layout = QtGui.QHBoxLayout()
for index in range(3):
layout.addWidget(QtGui.QLineEdit(self))
self.layout().insertLayout(0, layout)
def clearLayout(self, layout):
if layout is not None:
while layout.count():
item = layout.takeAt(0)
widget = item.widget()
if widget is not None:
widget.deleteLater()
else:
self.clearLayout(item.layout())
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 300, 100)
window.show()
sys.exit(app.exec_())
但当我在布局中应用takeAt方法时,为什么QLineEdit对象是None?我删除除此QLineEdit之外的所有内容。@user3329477。不看你的代码是不可能说的。