I am adding rows of widgets to a QGridLayout
like this (with a button):
def ajouter_un_mot_vocab(self) :
'''
'''
# Dictionnaire des mots de vocabulaire
self.dico_vocab_mot = {}
# Dictionnaire des définitions des mots de vocabulaire
self.dico_vocab_def = {}
# Liste pour chargement des données
# (écriture des textes par l'utilisateur)
self.liste_mots_vocabulaire = []
print
print 'self.grille_3_stack_3.rowCount() creation', self.grille_3_stack_3.rowCount()
print
#
for r in range(self.grille_3_stack_3.rowCount()) :
# Création des widgets et taille générique
self.dico_vocab_mot[r] = QTextEdit()
self.dico_vocab_def[r] = QTextEdit()
self.dico_vocab_mot[r].setMaximumWidth(180)
self.dico_vocab_mot[r].setMinimumWidth(180)
self.dico_vocab_mot[r].setMaximumHeight(54)
self.dico_vocab_mot[r].setMinimumHeight(54)
self.dico_vocab_def[r].setMaximumHeight(54)
self.dico_vocab_def[r].setMinimumHeight(54)
print 'r', r
# Conditions de redimensionnement
if r > 5 :
self.dico_vocab_mot[r].setMaximumHeight(34)
self.dico_vocab_mot[r].setMinimumHeight(34)
self.dico_vocab_def[r].setMaximumHeight(34)
self.dico_vocab_def[r].setMinimumHeight(34)
# Répartition dans la grille
self.grille_3_stack_3.addWidget(self.dico_vocab_mot[r], r+1, 0)
self.grille_3_stack_3.addWidget(self.dico_vocab_def[r], r+1, 1)
# Ecriture des n°s de lignes dans la partie mots de vocabulaire
self.grille_3_stack_3.addWidget(self.dico_vocab_mot[r].setText(str(r+1)+'. '), r+1, 0)
# Les données sont introduites dans une liste
self.liste_mots_vocabulaire.append([self.dico_vocab_mot[r], self.dico_vocab_def[r]])
# =====================================================
# Signaux
self.dico_vocab_mot[r].textChanged.connect(self.changements_phase_3)
self.dico_vocab_def[r].textChanged.connect(self.changements_phase_3)
# =====================================================
print 'self.dico_vocab_mot', self.dico_vocab_mot
print 'self.dico_vocab_def', self.dico_vocab_def
print self.liste_mots_vocabulaire
And removing the rows of widgets like this:
def supprimer_un_mot_vocab(self) :
'''
'''
index = len(self.liste_mots_vocabulaire)-1
for r in reversed(range(self.grille_3_stack_3.rowCount())) :
for c in reversed(range(self.grille_3_stack_3.columnCount()))
layout = self.grille_3_stack_3.itemAtPosition(r, c)
if layout is not None :
layout.widget().deleteLater()
#layout_1.widget().hide()
self.grille_3_stack_3.removeItem(layout)
self.liste_mots_vocabulaire.pop()
del self.dico_vocab_mot[index]
del self.dico_vocab_def[index]
print
print "rowCount apres suppr", self.grille_3_stack_3.rowCount()
print
print self.dico_vocab_mot
print self.dico_vocab_def
print self.liste_mots_vocabulaire
print
Everything works well the first time, when I add rows of widgets (for example five rows of widgets). Everything works well too if I delete the rows (for example two rows of widgets). But as soon as I decide to add a row again (after deletion), it does not work properly: I end up with six lines, while I should have three.
It must be my code for deleting lines that does not work properly (yet the rows are removed visually). What am I doing wrong?