Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的小部件不想消失_Python_Pyqt - Fatal编程技术网

Python 我的小部件不想消失

Python 我的小部件不想消失,python,pyqt,Python,Pyqt,我是新来的,我是法国人,所以请原谅我的英语 当我从QTableView中选择单元格时,我的一个函数会从标记列表中创建一些带有给定标签的按钮。但是,当我选择另一个单元格时,有时标记列表是空的,必须是空的。因此,我想清除旧按钮的布局,如果列表中没有标记,则不显示任何内容。但这里的代码是: def clearLayout(self, layout): if layout is not None: while layout.count(): item =

我是新来的,我是法国人,所以请原谅我的英语

当我从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方法不会取消显示我的按钮。你能帮我解决问题吗


真诚的。

在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!=没有一个我不知道你的确切用法是什么,你总是想创建一个新的布局。。。但至少先保存一个引用:

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

如果您总是创建一个新的布局对象:old_layout.deleteLayout

Nice one man,那么您可能也想销毁旧的布局对象。我觉得自己很愚蠢。。。我刚刚在initUI方法中移动了QVBoxLayout的声明,一切都正常。非常感谢。很高兴能帮忙。如果这解决了您的问题,请确保选中复选标记以关闭问题!