我最近开始学习Python,现在我正在使用PyQt库创建一个带有GUI的软件。
这是我的问题: 我创建了一个Scrollarea,我在这个scrollarea中添加了一个包含QGridLayout的小部件。
sa = QtGui.QScrollArea()
sa_widget = QtGui.QWidget()
self.sa_grid.setSizeConstraint(QtGui.QLayout.SetMinAndMaxSize)
sa_widget.setLayout(self.sa_grid)
sa.setWidgetResizable(True)
sa.setWidget(sa_widget)
然后我添加了10个QLabel(当然这只是一个例子,在这个例子中我使用QGridLayout就像一个垂直布局):
i = 0
while i<100:
i = i +1
add = QtGui.QLabel("Row %i" % i)
self.sa_grid.addWidget(add)
然后我创建了一个调用函数“function_name”的按钮,我希望这个函数删除一行,到目前为止这是我写的:
tmp = QtGui.QWidget()
tmp = self.sa_grid.itemAt(0)
self.sa_grid.removeItem(tmp)
删除第一行,gridlayout的每一行x都变成行x-1,但是,它不会删除文本“Row 1”,所以我在同一行看到“Row 0”和“Row 1”
任何人都可以帮助我吗?
非常感谢Davide
答案 0 :(得分:2)
从布局中删除项目不会将其删除。该项目将成为一个自由浮动的对象,没有相关的布局。
如果您想完全删除该对象,请明确删除它:
def deleteGridWidget(self, index):
item = self.sa_grid.itemAt(index)
if item is not None:
widget = item.widget()
if widget is not None:
self.sa_grid.removeWidget(widget)
widget.deleteLater()