2012-08-08 43 views
2

我是新來的,我是法國人,所以請原諒我的英語水平。我的部件不想消失

我的一個函數創建一個具有給定的標籤一些按鈕,從標籤列表,當我選擇從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方法不未顯示我的按鈕。你能幫我解決我的問題嗎?

真誠。

回答

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

+0

尼斯一人。我感到很蠢...... 我在我的initUI方法中移動了QVBoxLayout的聲明,並且一切正常。非常感謝。 – Rififi 2012-08-08 18:21:53

+0

很高興幫助。如果這解決了您的問題,請務必點擊複選標記以關閉該問題! – jdi 2012-08-08 18:41:25