2

私が欲しいのはウィジェットを完全に削除することです(それを削除する、削除するなど...)が、それはグリッドレイアウトにあるので、呼び出しremoveWidgetてもポインターを保持するので、Pythonはオブジェクトを削除したくありません。(削除された)コードは次のとおりです。

def addRow(self, row):
    self.entries.insert(row, QtGui.QLineEdit())
    self.gridlayout.addWidget(self.entries[row], row, 0)
...
def remRow(self, row):
    self.gridlayout.removeWidget(self.entries[row])
    del(self.entries[row])
...
(in another function)
foo.addRow(0)
foo.remRow(0)

グリッドレイアウトからウィジェットを削除しますが、完全には削除しないため、実際にはレイアウトの下(?)にパックされ、ウィジェットはレイアウトよりも明らかに大きくなります(ただし、終わりが見えないため、わかりません)。 。

繰り返しになりますが、QGridLayout内にあったウィジェットを完全に削除する方法はありますか?

前もって感謝します!

4

2 に答える 2

4

レイアウトは、ウィジェットをコンテナーに再ペアレント化します。したがって、レイアウトから削除しても、コンテナウィジェットは親のままであるため、ウィジェットは削除されません。.deleteLater()Qtにそのウィジェットを削除するように指示する必要があります(Pythonがウィジェットをパージできるように、ウィジェットのすべての参照を効果的にクリアします):

def remRow(self, row):
    self.gridlayout.removeWidget(self.entries[row])
    self.entries[row].deleteLater()
    del self.entries[row]
于 2012-11-01T19:46:18.903 に答える
1

ウィジェットを完全に削除したい場合は、ウィジェットを削除してください。Pythonからは、ウィジェットのdeleteLater()メソッドを呼び出さなければならない場合があります。Qtは、レイアウトから削除するなど、残りの処理を行う必要があります。

あなたの質問のが何delをするのかわかりませんが、どうやらそれはC++削除をしません。

于 2012-11-01T19:43:55.560 に答える