Python pyqt:如何从QVBoxLayout中删除元素?
我想要一个多色选择小部件。我这样做的方式是有一个“+”按钮和一个最初为空的vbox。按下+时,它会将QHBoxLayout添加到包含“-”按钮和3个微调框的vbox。当按下“-”按钮时,我希望该行消失,所有内容恢复到添加该行之前的样子。我目前拥有的代码是:Python pyqt:如何从QVBoxLayout中删除元素?,python,qt,qt4,pyqt,pyqt4,Python,Qt,Qt4,Pyqt,Pyqt4,我想要一个多色选择小部件。我这样做的方式是有一个“+”按钮和一个最初为空的vbox。按下+时,它会将QHBoxLayout添加到包含“-”按钮和3个微调框的vbox。当按下“-”按钮时,我希望该行消失,所有内容恢复到添加该行之前的样子。我目前拥有的代码是: vbox = self.ui.color_layout #from QtDesigner hbox = QtGui.QHBoxLayout() remove = QtGui.QPushButton("-", pare
vbox = self.ui.color_layout #from QtDesigner
hbox = QtGui.QHBoxLayout()
remove = QtGui.QPushButton("-", parent=self)
remove.clicked.connect(lambda: vbox.removeItem(hbox))
rspin = QtGui.QSpinBox(parent=self)
gspin = QtGui.QSpinBox(parent=self)
bspin = QtGui.QSpinBox(parent=self)
hbox.addWidget(remove)
hbox.addWidget(QtGui.QLabel("R:", parent=self))
hbox.addWidget(rspin)
hbox.addWidget(QtGui.QLabel("G:", parent=self))
hbox.addWidget(gspin)
hbox.addWidget(QtGui.QLabel("B:", parent=self))
hbox.addWidget(bspin)
vbox.addLayout(hbox)
添加小部件效果很好。然而,删除它们会导致一个看起来非常混乱的事情,行实际上没有被删除,但间距都是混乱的
我做错了什么
编辑:文档说,对于removeWidget
:
在这个调用之后,调用方负责为小部件提供合理的几何图形或将小部件放回布局中
我该怎么做?(我来自GTK背景…)
编辑2:我甚至跟踪了行并调用了takeAt
函数来删除它,但它仍然会出错。有什么好处?看起来布局已删除,但没有任何小部件
编辑3:这也不起作用,只是以类似的方式把事情搞砸了:
vbox = self.ui.color_layout
hbox = QtGui.QHBoxLayout()
row_widget = QtGui.QWidget(parent=self) #dummy widget to hold this stuff
remove = QtGui.QPushButton("-", parent=self)
def remove_func():
vbox.removeWidget(row_widget)
remove.clicked.connect(remove_func)
rspin = QtGui.QSpinBox(parent=self)
gspin = QtGui.QSpinBox(parent=self)
bspin = QtGui.QSpinBox(parent=self)
hbox.addWidget(remove)
hbox.addWidget(QtGui.QLabel("R:", parent=self))
hbox.addWidget(rspin)
hbox.addWidget(QtGui.QLabel("G:", parent=self))
hbox.addWidget(gspin)
hbox.addWidget(QtGui.QLabel("B:", parent=self))
hbox.addWidget(bspin)
row_widget.setLayout(hbox)
vbox.addWidget(row_widget)
尝试从父窗口小部件中删除,而不是从布局中删除 QLayout不是父级,正在布局的小部件的父级实际上是布局的父级。有关更多信息和更清晰的解释,请参阅 要删除小部件,请将其父项设置为“无”,如下所示:
widget = QWidget()
layout = QVBoxLayout()
btn = QPushButton("To be removed")
layout.addWidget(btn)
widget.setLayout(layout)
# later
btn.setParent(None)
什么是父窗口小部件?它在一个
QDialog
中,但它有任何类型。也很奇怪。。我假设qdialog是一个容器。我看到一个children
函数,但显然没有办法将子元素放入其中。我找到了父窗口小部件,但如何删除它?没有removeChild
或任何东西..啊,好的,所以这是唯一的方法。我用一个例子更新了我的答案。