我最近开始研究Python,现在我正在使用PyQt库通过GUI制作软件。
这是我的问题:
我创建了一个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)
最佳答案
从布局中删除项目不会将其删除。该项目将成为没有相关布局的自由 float 对象。
如果要完全摆脱对象,请显式删除它:
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()