我試圖從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