Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyqt:如何从QVBoxLayout中删除元素?_Python_Qt_Qt4_Pyqt_Pyqt4 - Fatal编程技术网

Python pyqt:如何从QVBoxLayout中删除元素?

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。按下+时,它会将QHBoxLayout添加到包含“-”按钮和3个微调框的vbox。当按下“-”按钮时,我希望该行消失,所有内容恢复到添加该行之前的样子。我目前拥有的代码是:

    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
或任何东西..啊,好的,所以这是唯一的方法。我用一个例子更新了我的答案。