2

私はここに来たばかりで、フランス人なので、私の英語を許してください.

私の関数の 1 つは、QTableView. しかし、別のセルを選択すると、タグのリストが空になることがあります (空でなければなりません)。リストにタグがない場合は何も表示しないように、古いボタンのレイアウトをクリアしたいと思います。しかし、ここにコード:

def clearLayout(self, layout):
    if layout is not None:
        while layout.count():
            item = layout.takeAt(0)
            widget = item.widget()
            if widget is not None:
                widget.deleteLater()
            else:
                self.clearLayout(item.layout())



def getInfos(self, element):

    """Slot qui récupère les infos d'une vidéo quand la cell
    correspondante est sélectionnée"""

    self.tags = liste.displayTag(self.modele.record(element.row()).value('id'))

    self.vbox_tags = QtGui.QVBoxLayout()

    if self.tags != None:
        self.liste_boutons = list()
        for indice, tag in enumerate(self.tags):
            self.liste_boutons.append(QtGui.QPushButton(tag))

            #Utilisation de la fonction partial trouvée ici:
            #http://stackoverflow.com/questions/4578861/connecting-slots-and-signals-in-pyqt4-in-a-loop
            self.liste_boutons[indice].clicked.connect(partial(self.displayVidsWithTag, tag))
            self.vbox_tags.addWidget(self.liste_boutons[indice])

        #On aligne les boutons des tags en haut
        self.vbox_tags.setAlignment(QtCore.Qt.AlignTop)
        self.onglet_tags.setLayout(self.vbox_tags)
    else:
        self.clearLayout(self.vbox_tags)

メソッドは私のボタンを表示にclearLayoutしません。私の問題を解決するのを手伝ってくれませんか?

心から。

4

1 に答える 1

3

以前のレイアウトを目にする前に上書きしていますclearLayout:

# previous self.vbox_tags layout goes bye-bye
self.vbox_tags = QtGui.QVBoxLayout()

if self.tags != None:
    ...
else:
    # clearing a new empty one
    self.clearLayout(self.vbox_tags)

これは、空の新しいレイアウトを基本的にクリアしていることを意味しますself.tags != None。常に新しいレイアウトを作成したいというあなたの正確な使用法はわかりません...しかし、少なくとも最初に参照を保存してください:

old_layout = self.vbox_tags
self.vbox_tags = QtGui.QVBoxLayout()
...
self.clearLayout(old_layout)

常に新しいレイアウト オブジェクトを作成している場合は、おそらく古いレイアウト オブジェクトも破棄する必要があります。old_layout.deleteLater()

于 2012-08-08T17:57:37.187 に答える