2
我有QGridLayout
,需要刪除其所有按鈕然後重新創建它們。 我試着循環使用count()
後跟takeAt()
來刪除返回的LayoutItem
的小部件。但是,由於某種原因,我只能獲得一半的小部件:其他LayoutItem
s沒有小部件。這很奇怪,因爲我可以看到它們。QGridLayout不會返回其所有子窗口小部件
這是我目前的簡化代碼。
import sys
from PySide.QtGui import *
from PySide.QtCore import *
class GridView(QWidget):
def __init__(self, parent=None):
super(GridView, self).__init__(parent)
self.grid = QGridLayout(self)
def setButtons(self):
self.clearPage()
for i in xrange(10):
btn = QPushButton(str(i))
self.grid.addWidget(btn, i/2, i % 2)
def clearPage(self):
for i in xrange(self.grid.count()):
print i
layoutItem = self.grid.takeAt(i)
# the following errors out after the fifth iteration as layoutItem.widget() returns None
print layoutItem.widget()
layoutItem.widget().deleteLater()
app = QApplication(sys.argv)
mainWindow = QWidget()
layout = QVBoxLayout()
mainWindow.setLayout(layout)
btn = QPushButton('test')
v = GridView()
btn.clicked.connect(v.setButtons)
layout.addWidget(v)
layout.addWidget(btn)
mainWindow.show()
sys.exit(app.exec_())
啊,當然。感謝那! – 2012-07-14 00:39:43