0

我使用 python 2.7 + qt4.8

如何动态更改窗口中的小部件数量?我需要删除所有小部件并以正确的数量创建新的小部件。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_())

并加载此用户界面:https ://yadi.sk/d/jBOmSubYhqbjm

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

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

这是一个简单的例子,但即使是他也不工作。而且我以后不需要添加按钮,以及带有一堆元素的整个块。

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

4

1 回答 1

1

这部分循环应该足够了:

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

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

于 2015-07-14T14:28:05.443 回答