Je teste pour l'instant le code (afin de l'intégrer dans le futur à une appli que je suis en train de créer).
Dans la fonction stack_phase_3 le layout est bien crée. Dans l'interface à chaque clic sur le bouton "Ajouter une ligne de vocabulaire", la ligne est bien ajoutée, pas de souci. Après ajout de plusieurs lignes, l'utilisateur est peut-etre amené à en supprimer certaines (bouton "Supprimer une ligne de vocabulaire"), dans un 1er temps ça fonctionne bien ... mais si après la suppression de certaines lignes, on veut de nouveau en rajouter, après appui sur le bouton Ajouter ..., et bien c'est une rafale de lignes qui sont crées ... il y a un souci, je n'arrive pas à savoir d'où ça vient.
Les fonctions concernées : stack_phase_3, ajouter_un_mot_vocab et supprimer_un_mot_vocab
De plus je voudrais créer un QScrollArea qui englobe toutes les lignes nouvellement crées et là je ne sais pas comment m'y prendre.
Pouvez-vous m'aider ?
Voici le code :
# -*- coding: utf-8 -*-
#!/usr/bin/python
#-*- coding: utf-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys, os
class EssaiQStackedWidget_Seq_Prof(QWidget) :
# Classe essai QTable Widget
def __init__(self, parent=None):
super(EssaiQStackedWidget_Seq_Prof, self).__init__(parent)
self.setWindowTitle("Essai QStackedWidget Seq Prof")
self.resize(400, 540)
self.setGeometry(0, 0, 400, 540)
groupe_1 = QGroupBox()
# La liste du menu se fait par
# l'intermédiaire d'un QComBoBox
liste = [u'Phase 1 de construction de la séquence du professeur', u"Phase 2 de construction de la séquence du professeur", u'Phase 3 de construction de la séquence du professeur']
self.liste_menu = QComboBox()
self.liste_menu.setMinimumHeight(36)
self.liste_menu.addItems(liste)
# ToolTips sur les items de la combo
self.liste_menu.setItemData(0, u"Niveau de classe, durée, Séquence n°, Titre progression, Incitation,\nDemande, Notions abordées, Consignes, Contraintes", Qt.ToolTipRole)
self.liste_menu.setItemData(1, u"Questionnement, Que vont apprendre les élèves,\nQuestion d'enseignement, Entrée principale du\nprogramme, Champ des pratiques plastiques", Qt.ToolTipRole)
self.w_menu_stack_1 = QWidget()
self.w_menu_stack_2 = QWidget()
self.w_menu_stack_3 = QWidget()
self.stack_phase_1()
self.stack_phase_2()
self.stack_phase_3()
self.stack = QStackedWidget(self)
self.stack.addWidget(self.w_menu_stack_1)
self.stack.addWidget(self.w_menu_stack_2)
self.stack.addWidget(self.w_menu_stack_3)
hbox = QVBoxLayout(self)
hbox.addWidget(self.liste_menu)
hbox.addWidget(self.stack)
self.setLayout(hbox)
self.liste_menu.currentIndexChanged.connect(self.affiche_phases)
def stack_phase_1(self):
'''
'''
# Widgets groupés
groupe_1 = QGroupBox()
groupe_2 = QGroupBox()
grid_1 = QGridLayout()
grid_1.setSpacing(0)
grid_2 = QGridLayout()
grid_2.setSpacing(0)
# ==========================================
# Labels Stacked 1
# ==========================================
label_classe = QLabel(u"Niveau de classe :")
label_duree = QLabel(u"Durée :")
label_sequence = QLabel(u"Séquence n° :")
label_progression = QLabel(u"Titre progression :")
label_incitation = QLabel(u"Incitation :")
label_demande = QLabel(u"Demande :")
label_notions_abordees = QLabel(u"Notions abordées :")
label_consignes = QLabel(u"Consignes :")
label_contraintes = QLabel(u"Contraintes :")
# ==========================================
# Widgets Stacked 1
# ==========================================
# Cases à cocher pour la sélection du niveau de classe
self.caseClasse6 = QRadioButton(u"6ème")
self.caseClasse5 = QRadioButton(u"5ème")
self.caseClasse4 = QRadioButton(u"4ème")
self.caseClasse3 = QRadioButton(u"3ème")
# Drapeau (aucune classe n'est cochée
# donc self.classe est à 0)
self.classe = 0
# Les lignes de saisie
self.ligne_duree = QLineEdit()
self.ligne_sequence = QLineEdit()
self.ligne_progression = QLineEdit()
self.ligne_incitation = QLineEdit()
# Les QTextEdit de saisie
self.texte_demande = QTextEdit()
self.texte_demande.setMaximumHeight(100)
self.texte_demande.setMinimumHeight(100)
self.texte_notions_abordees = QTextEdit()
self.texte_notions_abordees.setMaximumHeight(42)
self.texte_notions_abordees.setMinimumHeight(42)
self.texte_consignes = QTextEdit()
self.texte_consignes.setMaximumHeight(70)
self.texte_consignes.setMinimumHeight(70)
self.texte_contraintes = QTextEdit()
self.texte_contraintes.setMaximumHeight(70)
self.texte_contraintes.setMinimumHeight(70)
# Disposition dans la grille (stacked 1)
grid_1.addWidget(label_classe, 0, 0)
grid_1.addWidget(self.caseClasse6, 0, 1)
grid_1.addWidget(self.caseClasse5, 0, 2)
grid_1.addWidget(self.caseClasse4, 0, 3)
grid_1.addWidget(self.caseClasse3, 0, 4)
grid_2.addWidget(label_duree, 1, 0)
grid_2.addWidget(self.ligne_duree, 1, 1, 1, 4)
grid_2.addWidget(label_sequence, 2, 0)
grid_2.addWidget(self.ligne_sequence, 2, 1, 1, 4)
grid_2.addWidget(label_progression, 3, 0)
grid_2.addWidget(self.ligne_progression, 3, 1, 1, 4)
grid_2.addWidget(label_incitation, 4, 0)
grid_2.addWidget(self.ligne_incitation, 4, 1, 1, 4)
grid_2.addWidget(label_demande, 5, 0)
grid_2.addWidget(self.texte_demande, 5, 1, 1, 4)
grid_2.addWidget(label_notions_abordees, 6, 0)
grid_2.addWidget(self.texte_notions_abordees, 6, 1, 1, 4)
grid_2.addWidget(label_consignes, 7, 0)
grid_2.addWidget(self.texte_consignes, 7, 1, 1, 4)
grid_2.addWidget(label_contraintes, 8, 0)
grid_2.addWidget(self.texte_contraintes, 8, 1, 1, 4)
# ============================================= #
groupe_1.setLayout(grid_1)
groupe_2.setLayout(grid_2)
layout = QGridLayout()
layout.setSpacing(4)
layout.addWidget(groupe_1, 0, 0)
layout.addWidget(groupe_2, 1, 0)
# ============================================= #
# Le QStackedWidget englobe et fait apparaître la grille
# ici la grille layout (qui elle-même englobe le QGroupBox)
self.w_menu_stack_1.setLayout(layout)
# Initialisation des listes de récup des données
self.liste_donnees = []
# ==========================================
# Signaux
# ==========================================
# Les cases à cocher QRadioButton
self.caseClasse6.toggled.connect(lambda:self.caseEtCombo(self.caseClasse6))
self.caseClasse5.toggled.connect(lambda:self.caseEtCombo(self.caseClasse5))
self.caseClasse4.toggled.connect(lambda:self.caseEtCombo(self.caseClasse4))
self.caseClasse3.toggled.connect(lambda:self.caseEtCombo(self.caseClasse3))
#
self.ligne_duree.textChanged.connect(self.changements_phase_1)
self.ligne_sequence.textChanged.connect(self.changements_phase_1)
self.ligne_progression.textChanged.connect(self.changements_phase_1)
self.ligne_incitation.textChanged.connect(self.changements_phase_1)
#
self.texte_demande.textChanged.connect(self.changements_phase_1)
self.texte_notions_abordees.textChanged.connect(self.changements_phase_1)
self.texte_consignes.textChanged.connect(self.changements_phase_1)
self.texte_contraintes.textChanged.connect(self.changements_phase_1)
def stack_phase_2(self):
'''
'''
# Widgets groupés
groupe_1 = QGroupBox()
groupe_2 = QGroupBox()
groupe_3 = QGroupBox()
grid_1 = QGridLayout()
grid_1.setSpacing(0)
grid_2 = QGridLayout()
grid_2.setSpacing(10)
grid_3 = QGridLayout()
grid_3.setSpacing(10)
# ==========================================
# Labels Stacked 2
# ==========================================
label_questionnement = QLabel(u"Questionnement :")
label_que_vont_app_eleves = QLabel(u"Que vont apprendre\nles élèves :")
label_question_denseignement = QLabel(u"Question\nd'enseignement :")
label_entree_princ_prog = QLabel(u"Entrée principale\ndu programme :")
label_champ_pratiq_plast = QLabel(u"Champ des pratiques\nplastiques :")
# ==========================================
# Widgets Stacked 2
# ==========================================
self.texte_questionnement = QTextEdit()
self.texte_questionnement.setMaximumHeight(90)
self.texte_questionnement.setMinimumHeight(90)
self.texte_que_vont_app_eleves = QTextEdit()
self.texte_que_vont_app_eleves.setMaximumHeight(90)
self.texte_que_vont_app_eleves.setMinimumHeight(90)
self.texte_question_denseignement = QTextEdit()
self.texte_question_denseignement.setMaximumHeight(90)
self.texte_question_denseignement.setMinimumHeight(90)
# Cases à cocher pour la sélection de
# l'entrée principale du programme
self.caseEntr_1_Prog = QRadioButton(u"Cours d'Arts\nPlastiques")
self.caseEntr_1_Prog.setChecked(True)
# Drapeau la valeur par défaut est Cours ArtsP quand
# l'utilisateur n'a pas sélectionné de qradiobutton
self.entree_principale_prog = u"Cours d'Arts Plastiques"
print u"Entrée principale du programme :", self.entree_principale_prog
# Cases à cocher pour l'entrée principale du programme
self.caseEntr_2_Prog = QRadioButton(u"Hda")
self.caseEntr_3_Prog = QRadioButton(u"EPI")
self.caseEntr_4_Prog = QRadioButton(u"PEAC")
# Cases à cocher pour la sélection du champ des pratiques plastiques
self.case_prat_plast_1 = QCheckBox(u"Pratiques\nbidimensionnelles")
self.case_prat_plast_2 = QCheckBox(u"Pratiques\ntridimensionnelles")
self.case_prat_plast_3 = QCheckBox(u"Pratiques artistiques\nde l'image fixe et\nanimée")
self.case_prat_plast_4 = QCheckBox(u"Pratiques de la création\nartistique numérique")
# Disposition dans la grille (stacked 2)
grid_1.addWidget(label_questionnement, 0, 0)
grid_1.addWidget(self.texte_questionnement, 0, 1, 1, 4)
grid_1.addWidget(label_que_vont_app_eleves, 1, 0)
grid_1.addWidget(self.texte_que_vont_app_eleves, 1, 1, 1, 4)
grid_1.addWidget(label_question_denseignement, 2, 0)
grid_1.addWidget(self.texte_question_denseignement, 2, 1, 1, 4)
grid_2.addWidget(label_entree_princ_prog, 3, 0)
grid_2.addWidget(self.caseEntr_1_Prog, 3, 1)
grid_2.addWidget(self.caseEntr_2_Prog, 3, 2)
grid_2.addWidget(self.caseEntr_3_Prog, 3, 3)
grid_2.addWidget(self.caseEntr_4_Prog, 3, 4)
grid_3.addWidget(label_champ_pratiq_plast, 4, 0)
grid_3.addWidget(self.case_prat_plast_1, 4, 1)
grid_3.addWidget(self.case_prat_plast_2, 4, 2)
grid_3.addWidget(self.case_prat_plast_3, 4, 3)
grid_3.addWidget(self.case_prat_plast_4, 4, 4)
# ============================================= #
groupe_1.setLayout(grid_1)
groupe_2.setLayout(grid_2)
groupe_3.setLayout(grid_3)
layout = QGridLayout()
layout.setSpacing(4)
layout.addWidget(groupe_1, 0, 0)
layout.addWidget(groupe_2, 1, 0)
layout.addWidget(groupe_3, 2, 0)
# ============================================= #
# Le QStackedWidget englobe et fait apparaître la grille
# ici la grille layout (qui elle-même englobe le QGroupBox)
self.w_menu_stack_2.setLayout(layout)
#
self.liste_champ_prat_plast = [0, 0, 0, 0]
# ==========================================
# Signaux
# ==========================================
# Les cases à cocher QRadioButton
self.caseEntr_1_Prog.toggled.connect(lambda:self.entreePrincipaleProg(self.caseEntr_1_Prog))
self.caseEntr_2_Prog.toggled.connect(lambda:self.entreePrincipaleProg(self.caseEntr_2_Prog))
self.caseEntr_3_Prog.toggled.connect(lambda:self.entreePrincipaleProg(self.caseEntr_3_Prog))
self.caseEntr_4_Prog.toggled.connect(lambda:self.entreePrincipaleProg(self.caseEntr_4_Prog))
#
self.texte_questionnement.textChanged.connect(self.changements_phase_2)
self.texte_que_vont_app_eleves.textChanged.connect(self.changements_phase_2)
self.texte_question_denseignement.textChanged.connect(self.changements_phase_2)
#
# Les cases à cocher QCheckBox
self.case_prat_plast_1.toggled.connect(lambda:self.casePratPlast_1(self.case_prat_plast_1))
self.case_prat_plast_2.toggled.connect(lambda:self.casePratPlast_2(self.case_prat_plast_2))
self.case_prat_plast_3.toggled.connect(lambda:self.casePratPlast_3(self.case_prat_plast_3))
self.case_prat_plast_4.toggled.connect(lambda:self.casePratPlast_4(self.case_prat_plast_4))
def stack_phase_3(self) :
'''
'''
# Widgets groupés
groupe_1 = QGroupBox()
groupe_2 = QGroupBox()
groupe_3 = QGroupBox()
self.grille_1_stack_3 = QGridLayout()
self.grille_1_stack_3.setSpacing(0)
self.grille_2_stack_3 = QGridLayout()
self.grille_2_stack_3.setSpacing(0)
self.grille_3_stack_3 = QGridLayout()
self.grille_3_stack_3.setSpacing(0)
# ==========================================
# Labels Stacked 3
# ==========================================
label_annonce = QLabel(u"Pour ajouter (et éditer) des mots de vocabulaire, cliquez sur le bouton <b>Ajouter une ligne de vocabulaire</b>")
label_mot_vocabulaire = QLabel(u"Mots de vocabulaire")
label_definitions = QLabel(u"Définitions")
# ==========================================
# Widgets Stacked 3
# ==========================================
# Bouton pour ajouter une ligne pour les mots de vocabulaire
self.bouton_ajout_ligne_vocabulaire = QPushButton(u"Ajouter une ligne de vocabulaire")
# Bouton pour supprimer une ligne pour les mots de vocabulaire
self.bouton_supprime_ligne_vocabulaire = QPushButton(u"Supprimer une ligne de vocabulaire")
# La 1ère ligne de QTextEdit
self.texte_mot_vocab = QTextEdit()
self.texte_mot_vocab.setMaximumHeight(40)
self.texte_mot_vocab.setMinimumHeight(40)
self.texte_mot_vocab.setMaximumWidth(180)
self.texte_mot_vocab.setMinimumWidth(180)
self.texte_definition = QTextEdit()
self.texte_definition.setMaximumHeight(54)
self.texte_definition.setMinimumHeight(54)
# Disposition dans la grille (stacked 3)
self.grille_1_stack_3.addWidget(self.bouton_ajout_ligne_vocabulaire, 0, 0)
self.grille_1_stack_3.addWidget(self.bouton_supprime_ligne_vocabulaire, 0, 1)
self.grille_1_stack_3.addWidget(label_mot_vocabulaire, 1, 0)
self.grille_1_stack_3.addWidget(label_definitions, 1, 1)
self.grille_2_stack_3.addWidget(label_mot_vocabulaire, 0, 0, 1, 1)
self.grille_2_stack_3.addWidget(label_definitions, 0, 1, 1, 1)
#self.grille_3_stack_3.addWidget(label_annonce, 0, 0)
# ============================================= #
groupe_1.setLayout(self.grille_1_stack_3)
groupe_2.setLayout(self.grille_2_stack_3)
groupe_3.setLayout(self.grille_3_stack_3)
layout = QGridLayout()
layout.setSpacing(0)
layout.addWidget(groupe_1, 0, 0)
layout.addWidget(groupe_2, 1, 0)
layout.addWidget(groupe_3, 2, 0)
# ============================================= #
# Le QStackedWidget englobe et fait apparaître la grille
# ici la grille layout (qui elle-même englobe le QGroupBox)
self.w_menu_stack_3.setLayout(layout)
# ==========================================
# Signaux
# ==========================================
# Les boutons ajoutent des lignes de questions et peuvent aussi les enlever
self.bouton_ajout_ligne_vocabulaire.clicked.connect(self.ajouter_un_mot_vocab)
self.bouton_supprime_ligne_vocabulaire.clicked.connect(self.supprimer_un_mot_vocab)
def caseEtCombo(self, c):
''' Fonction de récupération des valeurs des
cases à cocher pour le niveau de classe '''
# Sélection des classes et on montre ou on cache
# les combos (et items contenus) des compétences
# travaillées
if c.isChecked() == True :
self.classe = unicode(c.text()[0])
else : self.classe = 0
if self.classe == u"6" :
print "Niveau de classe :", self.classe
elif self.classe in [u'5', u'4', u'3']:
# Drapeau (quand l'utilisateur n'a
# pas sélectionné de qradiobutton)
print "Niveau de classe :", self.classe
def changements_phase_1(self) :
'''
'''
# Récup des données
try : self.duree = unicode(self.ligne_duree.text())
except : self.duree = u''
try : self.sequence = unicode(self.ligne_sequence.text())
except : self.sequence = u''
try : self.progression = unicode(self.ligne_progression.text())
except : self.progression = u''
try : self.incitation = unicode(self.ligne_incitation.text())
except : self.incitation = u''
try : self.demande = unicode(self.texte_demande.toPlainText())
except : self.demande = u''
try : self.notions = unicode(self.texte_notions_abordees.toPlainText())
except : self.notions = u''
try : self.consignes = unicode(self.texte_consignes.toPlainText())
except : self.consignes = u''
try : self.contraintes = unicode(self.texte_contraintes.toPlainText())
except : self.contraintes = u''
# Si le niveau de classe (self.classe à 0) n'est pas sélectionné, une boîte de dialogue nous en informe
if self.classe == 0 :
message = QMessageBox.warning(self, u'Message', u"Vous devez sélectionner un niveau de classe avant de continuer !!!", QMessageBox.Ok)
#
try :
self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, self.notions, self.consignes, self.contraintes])
#
self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
except : pass
#
print "self.liste_donnees_finales", self.liste_donnees_finales
def entreePrincipaleProg(self, c):
''' Fonction de récupération des valeurs des
cases à cocher pour l'entrée principale du programme '''
if c.isChecked() == True :
self.entree_principale_prog = unicode(c.text())
if self.entree_principale_prog == u"Cours d'Arts\nPlastiques" :
print u"Entrée principale du programme :", self.entree_principale_prog
elif self.entree_principale_prog in [u"Hda", u"EPI", u"PEAC"]:
# Drapeau (quand l'utilisateur n'a
# pas sélectionné de qradiobutton)
print u"Entrée principale du programme :", self.entree_principale_prog
#
try :
self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
#
self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
except : pass
#
print "self.liste_donnees_finales", self.liste_donnees_finales
def changements_phase_2(self) :
'''
'''
# Récup des données
try : self.questionnement = unicode(self.texte_questionnement.toPlainText())
except : self.questionnement = u''
try : self.que_vont_app_eleves = unicode(self.texte_que_vont_app_eleves.toPlainText())
except : self.que_vont_app_eleves = u''
try : self.question_denseignement = unicode(self.texte_question_denseignement.toPlainText())
except : self.question_denseignement = u''
# Si le niveau de classe (self.classe à 0) n'est pas sélectionné, une boîte de dialogue nous en informe
if self.classe == 0 :
message = QMessageBox.warning(self, u'Message', u"Vous devez sélectionner un niveau de classe avant de continuer !!!", QMessageBox.Ok)
#
try :
self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
self.que_vont_app_eleves, self.question_denseignement])
#
self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
except : pass
#
print "self.liste_donnees_finales", self.liste_donnees_finales
# ==============================================================================
''' Fonctions de récupération des valeurs. Cases
à cocher pour le champ des pratiques plastiques '''
def casePratPlast_1(self, c):
if c.isChecked() == True :
self.prat_plast = unicode(c.text())
if self.prat_plast == u"Pratiques\nbidimensionnelles" :
self.prat_plast = u"[x] Pratiques bidimensionnelles"
#
self.liste_champ_prat_plast[0] = self.prat_plast
#
try :
self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
#
self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
except : pass
#
print "self.liste_donnees_finales", self.liste_donnees_finales
def casePratPlast_2(self, c):
if c.isChecked() == True :
self.prat_plast = unicode(c.text())
if self.prat_plast == u"Pratiques\ntridimensionnelles" :
self.prat_plast = u"[x] Pratiques tridimensionnelles"
self.liste_champ_prat_plast[1] = self.prat_plast
#
try :
self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
#
self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
except : pass
#
print "self.liste_donnees_finales", self.liste_donnees_finales
def casePratPlast_3(self, c):
if c.isChecked() == True :
self.prat_plast = unicode(c.text())
if self.prat_plast == u"Pratiques artistiques\nde l'image fixe et\nanimée" :
self.prat_plast = u"[x] Pratiques artistiques de l'image fixe et animée"
self.liste_champ_prat_plast[2] = self.prat_plast
#
try :
self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
#
self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
except : pass
#
print "self.liste_donnees_finales", self.liste_donnees_finales
def casePratPlast_4(self, c):
if c.isChecked() == True :
self.prat_plast = unicode(c.text())
if self.prat_plast == u"Pratiques de la création\nartistique numérique" :
self.prat_plast = u"[x] Pratiques de la création artistique numérique"
self.liste_champ_prat_plast[3] = self.prat_plast
#
try :
self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
#
self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
except : pass
#
print "self.liste_donnees_finales", self.liste_donnees_finales
# ==============================================================================
def ajouter_un_mot_vocab(self) :
'''
'''
self.dico_vocab = {}
# Liste pour chargement des données
# (écriture des textes par l'utilisateur)
self.liste_mots_vocabulaire = []
#
for r in range(self.grille_3_stack_3.rowCount()) :
QApplication.processEvents()
# Création des widgets et taille générique
self.dico_vocab[r] = QTextEdit()
self.dico_vocab[r+1] = QTextEdit()
self.dico_vocab[r].setMaximumWidth(180)
self.dico_vocab[r].setMinimumWidth(180)
self.dico_vocab[r].setMaximumHeight(54)
self.dico_vocab[r].setMinimumHeight(54)
self.dico_vocab[r+1].setMaximumHeight(54)
self.dico_vocab[r+1].setMinimumHeight(54)
print 'r', r
# Conditions de redimensionnement
if r > 5 :
self.dico_vocab[r].setMaximumHeight(34)
self.dico_vocab[r].setMinimumHeight(34)
self.dico_vocab[r+1].setMaximumHeight(34)
self.dico_vocab[r+1].setMinimumHeight(34)
# Répartition dans la grille
self.grille_3_stack_3.addWidget(self.dico_vocab[r], r+1, 0)
self.grille_3_stack_3.addWidget(self.dico_vocab[r+1], r+1, 1)
# Ecriture des n°s de lignes dans la partie mots de vocabulaire
self.grille_3_stack_3.addWidget(self.dico_vocab[r].setText(str(r+1)+'. '), r+1, 0)
# Les données sont introduites dans une liste
self.liste_mots_vocabulaire.append([self.dico_vocab[r], self.dico_vocab[r+1]])
# =====================================================
# Signaux
self.dico_vocab[r].textChanged.connect(self.changements_phase_3)
self.dico_vocab[r+1].textChanged.connect(self.changements_phase_3)
# =====================================================
print 'self.dico_vocab', self.dico_vocab
print self.liste_mots_vocabulaire
def supprimer_un_mot_vocab(self) :
'''
'''
index = len(self.liste_mots_vocabulaire)-1
for r in reversed(range(self.grille_3_stack_3.rowCount())) :
#print "suppr", r
QApplication.processEvents()
for c in reversed(range(self.grille_3_stack_3.columnCount())) :
QApplication.processEvents()
#print "suppr", c, 'index', index
layout = self.grille_3_stack_3.itemAtPosition(r, c)
#print "suppr layout", layout
if layout is not None :
QApplication.processEvents()
layout.widget().deleteLater()
#layout_1.widget().hide()
self.grille_3_stack_3.removeItem(layout)
#print "index", index
# TRI du dictionnaire (sur la clé)
# https://www.quennec.fr/trucs-astuces/langages/python/python-trier-le-contenu-dun-dictionnaire-dict
#self.dico_vocab = sorted(self.dico_vocab.items(), key=lambda t: t[0])
#print 'self.dico_vocab TRI', self.dico_vocab
self.liste_mots_vocabulaire.pop()
del self.dico_vocab[index+1]
print
#print "rowCount apres suppr", self.grille_3_stack_3.rowCount()
#print "columnCount apres suppr", self.grille_3_stack_3.columnCount()
#print "self.grille_3_stack_3.count()", self.grille_3_stack_3.count()
print
print self.dico_vocab
print self.liste_mots_vocabulaire
print
def changements_phase_3(self) :
'''
'''
#self.liste_mots_vocabulaire_finale = [[unicode(vocab[0].toPlainText()), unicode(vocab[1].toPlainText())] for vocab in self.liste_mots_vocabulaire if unicode(vocab[0].toPlainText()) != u'' and unicode(vocab[1].toPlainText()) != u'']
self.liste_mots_vocabulaire_finale = [[unicode(vocab[0].toPlainText()), unicode(vocab[1].toPlainText())] for vocab in self.liste_mots_vocabulaire]
print
print "self.liste_mots_vocabulaire_finale :"
print
print self.liste_mots_vocabulaire_finale
print
def affiche_phases(self,i):
self.stack.setCurrentIndex(i)
if __name__ == '__main__':
app = QApplication(sys.argv)
matable = EssaiQStackedWidget_Seq_Prof()
matable.show()
app.exec_()
Merci d'avance.
A bientot.
[PyQt4] Supprimer lignes de widget
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.