gpt4 book ai didi

qt - QGridLayout 不返回其所有子部件

转载 作者:行者123 更新时间:2023-12-04 05:39:21 25 4
gpt4 key购买 nike

我有一个 QGridLayout并且需要删除其所有按钮,然后重新创建它们。
我尝试使用 count() 循环布局其次是 takeAt()删除返回的 LayoutItem的小部件。然而,出于某种原因,我只得到了一半的小部件:另一个 LayoutItem s 没有小部件。这很奇怪,因为我可以看到它们。

这是我目前的简化代码。

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_())

最佳答案

尝试使用

self.grid.takeAt( 0 ) 

而不是:
self.grid.takeAt(i)

在您的代码中,您在第一次迭代中使用了 At( 0 )。这在内部使旧的#1 成为新的#0,旧的#2 成为新的#1,依此类推。

然后在您的下一次迭代中使用 At( 1 ),这实际上是旧的 #2。这样旧的#1(现在是#0)就不会被删除。

关于qt - QGridLayout 不返回其所有子部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11466360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com