我最近开始研究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()

09-30 14:07
查看更多