【问题标题】:My widgets don't want to disappear我的小部件不想消失
【发布时间】:2012-08-05 21:38:08
【问题描述】:

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

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

真诚的。

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    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()

    【讨论】:

    • 好人。我觉得很愚蠢......我只是在我的 initUI 方法中移动了 QVBoxLayout 的声明,一切正常。非常感谢。
    • 很高兴为您提供帮助。如果这解决了您的问题,请务必点击复选标记以关闭问题!
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2020-03-08
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多