web-dev-qa-db-ja.com

pyqt:ウィジェットを削除する方法?

削除したい子を持つQGroupBoxウィジェットがあります。それ、どうやったら出来るの? removeWidgetremoveChildremoveItem、または ドキュメント に類似するものが見つかりません。私はレイアウトから物事を削除する方法しか見ることができませんが、それは明らかに、実際のウィジェットからそれを削除しません。

34
Claudiu

さて、これは機能します:削除したいウィジェットで、widget.setParent(None)を呼び出します。レイアウトに追加するとウィジェットがコンテナに追加されるのが好きですが、レイアウトから削除しても…楽しいものではありません。

27
Claudiu

ウィジェットに依存する子ウィジェットがない場合、使用できると思います:

layout.removeWidget(self.widget_name)
self.widget_name.deleteLater()
self.widget_name = None

私のテストでは、それがあなたがしなければならない子を持つウィジェットであるとき:

import sip
layout.removeWidget(self.widget_name)
sip.delete(self.widget_name)
self.widget_name = None

クラスまたはグローバルレベルでウィジェットの変数名がない場合でも、layout.takeAt(index)を使用してレイアウトから削除し、QLayoutItem.widget()メソッドでこの関数が返すQLayoutItemからウィジェットポインターを取得できます。その場合、関数の外部で参照されないため、変数名をNoneに割り当てる必要はありません。

両方の方法を試して、何が効果的かを確認してください(何度も繰り返してメモリをリークしないでください)。

41
skuda