我使用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()
函数 - 但它没有效果......
这是一个简单的例子,但即使他不工作。我不需要在将来添加一个按钮,也不需要添加一大堆元素。
如何动态添加和删除小部件?
答案 0 :(得分:1)
这部分循环应该足够了:
while True:
item = self.gridLayout_2.takeAt(0)
我怀疑您正在尝试删除已删除的小部件,因此过早地结束了循环。可能在某处写了一条错误消息。