pyqt。如何添加和删除小部件?

pyqt. how to add and delete widgets?

我使用 python 2.7 + qt4.8

如何动态更改window中的小部件数量?我需要删除所有小部件并创建数量合适的新小部件。 testarovaniya 为一个简单的脚本制作:

import sys
from PyQt4 import QtCore, QtGui, uic

class MainForm(QtGui.QDialog):
    def __init__(self):
        super(MainForm, self).__init__()
        uic.loadUi("testQTwindow.ui", self)

        self.connect(self.addBtn, QtCore.SIGNAL("clicked()"), self.addBtnClick)
        self.connect(self.delBtn, QtCore.SIGNAL("clicked()"), self.delBtnClick)

    def addBtnClick(self):
        self.tempBtn = QtGui.QPushButton('button')
        self.gridLayout_2.addWidget(self.tempBtn)

    def delBtnClick(self):
        while True:
            item = self.gridLayout_2.takeAt(0)
            if not item:
                break
            self.gridLayout_2.removeWidget(item.widget())


app = QtGui.QApplication(sys.argv)
form = MainForm()
form.show()
sys.exit(app.exec_())

并加载此 UI:https://yadi.sk/d/jBOmSubYhqbjm

我有两个按钮。一种用于使用 gridLayout 向 QScrollArea 添加按钮。第二个删除 QScrollArea 中的所有小部件。添加作品。我可以看到如何有新按钮。但是当你按下清洁按钮时并没有消失,新的继续出现在旧的之上。旧按钮也可以按下,这表明它们可以工作,而不仅仅是清除重绘的幽灵window。

我尝试了 repaint()update() 功能 - 但它没有效果...

这是一个简单的例子,但连他都不行。而且我以后不用加按钮了,整块都是一堆元素。

如何动态添加和删除小部件?

这部分循环应该足够了:

    while True:
        item = self.gridLayout_2.takeAt(0)

我怀疑您正试图删除已经删除的小部件,因此过早地结束了循环。可能某处写了一条错误消息。