12

動的に変更できる子ウィジェットを持つウィジェットを作成したいと思います。これが私が試したものです:

import sys
from PySide.QtCore import *
from PySide.QtGui import *

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setLayout(QVBoxLayout())
        self.child = QLabel("foo", self)
        self.layout().addWidget(self.child)
    def update(self):
        self.layout().removeWidget(self.child)
        self.child = QLabel("bar", self)
        self.layout().addWidget(self.child)

app = QApplication(sys.argv)
widget = Widget()
widget.show()
widget.update()
app.exec_()

問題は、これが実際に「foo」ラベルを視覚的に削除しないことです。「バー」の上にレンダリングされます。問題のスクリーンショット。新しいウィジェットのみが表示されるように、古いウィジェットを削除するにはどうすればよいですか?

ラベルのテキスト プロパティを変更できることを知っています。これは私のアプリケーションに必要なものではありません。実際のウィジェットを (別のウィジェット タイプに) 変更する必要があります。

4

1 に答える 1

22

removeWidget()レイアウトから項目を削除するだけで、削除はしません。を呼び出して、子ウィジェットを削除できますsetParent(None)

def update(self):
    self.layout().removeWidget(self.child)
    self.child.setParent(None)
    self.child = QLabel("bar", self)
    self.layout().addWidget(self.child)
于 2011-06-20T12:18:05.147 に答える