更新动态QGridLayout - Python PyQt

5

我最近开始学习Python,并使用PyQt库制作一个带有GUI的软件。

以下是我的问题: 我创建了一个Scrollarea,我将一个包含QGridLayout的widget放入这个scrollarea中。

    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)

它删除第一行,每 x 行的网格布局变成第 x-1 行,但它不会删除文本“第1行”,所以我看到“第0行”和“第1行”在同一行上。
有人能帮我吗?
非常感谢,Davide
1个回答

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

完美运行,非常感谢!我浪费了很多时间寻找答案,现在终于找到了。您能否向我推荐一些出色的Python/PyQt教程?非常感谢您的帮助! - xuT
@TheTux94。PyQt Wiki 不是一个坏的起点。并非所有材料都是最新的(其中一些与 PyQt3 相关而不是 PyQt4),但如果你仔细查找,应该会发现很多有用的东西。 - ekhumoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接