我想要一个多色选择小部件。我这样做的方式是有一个“+”按钮,以及一个最初是空的vbox。当按下+时,它会将QHBoxLayout添加到包含“ - ”按钮和3个旋转框的vbox。当按下“ - ”按钮时,我希望该行消失,并且所有内容都会恢复为在添加该行之前的样子。我现在拥有的代码是:pyqt:如何从QVBoxLayout中移除元素?
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)
更新我用一个例子回答。 – 2011-05-05 17:07:29