我试图从PySide应用程序中的布局中删除Qt小部件。PySide:从布局中删除小部件
这是一个简单的例子。这是与它5个按钮的控件,中间一个是应该删除本身点击时:
import sys
from PySide import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
layout = QtGui.QVBoxLayout()
buttons = [QtGui.QPushButton(str(x)) for x in xrange(5)]
def deleteButton():
b = layout.takeAt(2)
buttons.pop(2)
del b
buttons[2].clicked.connect(deleteButton)
map(layout.addWidget, buttons)
widget.setLayout(layout)
widget.show()
app.exec_()
实际发生的是:
按钮是不可点击,并明确没有考虑到布局计算,但其图像保持原位。
按照Qt documentation,从布局删除所有对象的正确的方法是:
while ((child = layout->takeAt(0)) != 0) {
delete child;
}
在这里,我只是想删除的第三个按钮,所以我就打电话takeAt(2)
,然后del b
调用该项目的析构函数。按钮对象也是buttons
列表中的.pop
'd,以确保不存在对该对象的剩余引用。我的代码与Qt文档中的代码有什么不同,会导致这种行为?
我只想在一个非常合适的问题上恭喜你。我最近看到很多这样的东西,只是几句没有上下文的句子,或者是我们期望阅读的大量代码。这有一个非常明确的问题,以及一个非常简洁和可运行的代码示例。你的照片还可以进一步澄清这个问题。并且你展示你的尝试。好样的! – jdi 2012-03-28 00:19:53