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_()
実際に何が起こることはこれです:
ボタンをunclickableと明確ですレイアウト計算には考慮されませんが、そのイメージはそのまま残ります。
Qt documentationによると、レイアウトからすべてのオブジェクトを削除する正しい方法は次のとおりです。
ここwhile ((child = layout->takeAt(0)) != 0) {
delete child;
}
呼び出すために私は3番目のボタンを削除したいので、私はちょうどtakeAt(2)
を呼び出し、その後、del b
そのアイテムのデストラクタ。ボタンオブジェクトは、オブジェクトに残っている参照がないことを確認するために、buttons
リストの.pop
のdです。このような動作を引き起こすQtドキュメントのコードと私のコードはどのように違うのですか?
本当にうまく形成された質問をお祝いしたいと思います。最近私はとても多くのことを見てきましたが、それは文脈のない単純な文章、あるいは私たちが読むと予想される大量のコードです。これには、非常に簡潔で実行可能なコード例とともに、非常に明確な問題が述べられています。あなたの写真は、さらに問題を明確にします。そして、あなたが試したことを示します。ブラボー! – jdi