擅长:python、mysql、java
<p>从布局中删除小部件时,它仍保留在父小部件的
<a href="http://doc.qt.io/qt-4.8/objecttrees.html" rel="nofollow noreferrer">object tree</a>,因此它会显示在任何布局之外。
要从对象树中删除小部件,请调用<code>widget.setParent(None)</code>。
<code>widget.deleteLater()</code>也有效。<br/>
这是我的MCVE(Qt4,Py2.7):</p>
<pre><code>from PyQt4.QtGui import (QApplication, QWidget, QPushButton,
QVBoxLayout, QHBoxLayout)
app=QApplication([])
self = QWidget()
main_layout = QVBoxLayout(self)
clients = []
l2 = QHBoxLayout()
main_layout.addLayout(l2)
b_add = QPushButton('add', self)
l2.addWidget(b_add)
def addClient():
b = QPushButton(str(len(clients)), self)
clients.append(b)
main_layout.addWidget(b)
b_add.clicked.connect(addClient)
b_rm = QPushButton('rm', self)
l2.addWidget(b_rm)
def deleteClient():
b = clients.pop()
main_layout.removeWidget(b)
# comment out two following lines to get the behavior you observe
b.setParent(None)
self.adjustSize()
b_rm.clicked.connect(deleteClient)
self.show()
app.exec_()
</code></pre>
<p>在我的系统上,我还必须在删除后调用<code>self.adjustSize()</code>来调整主窗口的大小</p>