Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- #!/usr/bin/python
- #-*- coding: utf-8 -*-
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
- import sys, os
- from PIL import Image
- 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', u'Phase 4 de construction de la séquence du professeur', u'Phase 5 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.liste_menu.setItemData(2, u"Vocabulaire", Qt.ToolTipRole)
- self.liste_menu.setItemData(3, u"Questions posées aux élèves", Qt.ToolTipRole)
- self.liste_menu.setItemData(3, u"Références artistiques", Qt.ToolTipRole)
- self.w_menu_stack_1 = QWidget()
- self.w_menu_stack_2 = QWidget()
- self.w_menu_stack_3 = QWidget()
- self.w_menu_stack_4 = QWidget()
- self.w_menu_stack_5 = QWidget()
- self.stack_phase_1()
- self.stack_phase_2()
- self.stack_phase_3()
- self.stack_phase_4()
- self.stack_phase_5()
- 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)
- self.stack.addWidget(self.w_menu_stack_4)
- self.stack.addWidget(self.w_menu_stack_5)
- hbox = QVBoxLayout(self)
- hbox.addWidget(self.liste_menu)
- hbox.addWidget(self.stack)
- self.setLayout(hbox)
- # Phase 3
- # -----------------------
- # 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 = []
- # Phase 4
- # -----------------------
- # Dictionnaire des questions
- # posées aux élèves
- # -----------------------
- self.dico_question_pos_elev = {}
- # -----------------------
- # Liste pour chargement des données
- # (écriture des textes par l'utilisateur)
- # -----------------------
- self.liste_questions_pos_elev = []
- # Phase 5
- # -----------------------
- # Dictionnaire du chemin des références aristiques
- # -----------------------
- self.dico_chem_ref_art = {}
- # -----------------------
- # Dictionnaire des commentaires des références artistiques
- # -----------------------
- self.dico_com_ref_art = {}
- # -----------------------
- # Dictionnaire des QPushButton de chargement références artistiques
- # -----------------------
- self.dico_bout_charg_ref_art = {}
- # -----------------------
- # Liste pour chargement des données
- # (écriture des textes par l'utilisateur)
- # -----------------------
- self.liste_ref_artistiques = []
- # Signal
- 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)
- # ============================================= #
- #
- #self.w_menu_stack_1.setLayout(grid)
- # 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 (utilisation de lambda
- # car il y a un argument dans la fonction appelée)
- 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 (utilisation de lambda
- # car il y a un argument dans la fonction appelée)
- 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 (utilisation de lambda
- # car il y a un argument dans la fonction appelée)
- # 1 Fonction pour chaque 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(60)
- self.grille_3_stack_3 = QGridLayout()
- self.grille_3_stack_3.setSpacing(0)
- # ==========================================
- # Labels Stacked 3
- # ==========================================
- self.label_annonce_vocab = 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")
- # 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_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(self.label_annonce_vocab, 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 vocabulaire 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 stack_phase_4(self) :
- '''
- '''
- # Widgets groupés
- groupe_1 = QGroupBox()
- groupe_2 = QGroupBox()
- groupe_3 = QGroupBox()
- self.grille_1_stack_4 = QGridLayout()
- self.grille_1_stack_4.setSpacing(0)
- self.grille_2_stack_4 = QGridLayout()
- self.grille_2_stack_4.setSpacing(0)
- self.grille_3_stack_4 = QGridLayout()
- self.grille_3_stack_4.setSpacing(0)
- # ==========================================
- # Labels Stacked 4
- # ==========================================
- label_annonce_questions = QLabel(u"Pour ajouter (et éditer) des questions posées aux élèves, cliquez sur le bouton <b>Ajouter une ligne de question posée aux élèves</b>")
- label_questions = QLabel(u"Questions posées aux élèves")
- #label_definitions = QLabel(u"Définitions")
- # ==========================================
- # Widgets Stacked 4
- # ==========================================
- # Bouton pour ajouter une ligne de question posée aux élèves
- self.bouton_ajout_ligne_question = QPushButton(u"Ajouter une ligne de question posée aux élèves")
- # Bouton pour supprimer une ligne de question posée aux élèves
- self.bouton_supprime_ligne_question = QPushButton(u"Supprimer une ligne de question posée aux élèves")
- # Disposition dans la grille (stacked 4)
- self.grille_1_stack_4.addWidget(self.bouton_ajout_ligne_question, 0, 0)
- self.grille_1_stack_4.addWidget(self.bouton_supprime_ligne_question, 0, 1)
- self.grille_2_stack_4.addWidget(label_questions, 0, 0, 1, 1)
- #self.grille_3_stack_3.addWidget(label_annonce_questions, 0, 0)
- # ============================================= #
- groupe_1.setLayout(self.grille_1_stack_4)
- groupe_2.setLayout(self.grille_2_stack_4)
- groupe_3.setLayout(self.grille_3_stack_4)
- 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_4.setLayout(layout)
- # ==========================================
- # Signaux
- # ==========================================
- # Les boutons ajoutent des lignes de questions et peuvent aussi les enlever
- self.bouton_ajout_ligne_question.clicked.connect(self.ajouter_une_question)
- self.bouton_supprime_ligne_question.clicked.connect(self.supprimer_la_question)
- def stack_phase_5(self) :
- '''
- '''
- # Widgets groupés
- groupe_1 = QGroupBox()
- groupe_2 = QGroupBox()
- groupe_3 = QGroupBox()
- self.grille_1_stack_5 = QGridLayout()
- self.grille_1_stack_5.setSpacing(0)
- self.grille_2_stack_5 = QGridLayout()
- self.grille_2_stack_5.setSpacing(174)
- self.grille_3_stack_5 = QGridLayout()
- self.grille_3_stack_5.setSpacing(0)
- # ==========================================
- # Labels Stacked 5
- # ==========================================
- self.label_annonce_ref_art = QLabel(u"Pour ajouter (et éditer) des références artistiques, cliquez sur le bouton <b>Ajouter une référence artistique</b>")
- label_chem_img_ref_art = QLabel(u"Chemin de l'image")
- label_com_ref_art = QLabel(u"Commentaire sur l'oeuvre")
- label_com_ref_art.setGeometry(QRect(500, 500, 500, 100))
- #label_com_ref_art.resize(1000, 30)
- label_charg_img_ref_art = QLabel(u"Charger image")
- # ==========================================
- # Widgets Stacked 5
- # ==========================================
- # Bouton pour ajouter une ligne pour les références artistiques
- self.bouton_ajout_ligne_ref_art = QPushButton(u"Ajouter une référence artistique")
- # Bouton pour supprimer une ligne pour les références artistiques
- self.bouton_supprime_ligne_ref_art = QPushButton(u"Supprimer une référence artistique")
- '''
- # La 1ère ligne de QTextEdit
- self.texte_chem_img_ref_art = QTextEdit()
- self.texte_chem_img_ref_art.setMaximumHeight(40)
- self.texte_chem_img_ref_art.setMinimumHeight(40)
- self.texte_chem_img_ref_art.setMaximumWidth(180)
- self.texte_chem_img_ref_art.setMinimumWidth(180)
- self.texte_com_ref_art = QTextEdit()
- self.texte_com_ref_art.setMaximumHeight(54)
- self.texte_com_ref_art.setMinimumHeight(54)
- self.bouton_charg_img_ref_art = QPushButton()
- '''
- # Disposition dans la grille (stacked 5)
- self.grille_1_stack_5.addWidget(self.bouton_ajout_ligne_ref_art, 0, 0)
- self.grille_1_stack_5.addWidget(self.bouton_supprime_ligne_ref_art, 0, 1)
- self.grille_2_stack_5.addWidget(label_chem_img_ref_art, 0, 0, 1, 1)
- self.grille_2_stack_5.addWidget(label_com_ref_art, 0, 1, 1, 1)
- self.grille_2_stack_5.addWidget(label_charg_img_ref_art, 0, 2, 1, 1)
- #self.grille_3_stack_5.addWidget(self.label_annonce_ref_art, 0, 0)
- # ============================================= #
- groupe_1.setLayout(self.grille_1_stack_5)
- groupe_2.setLayout(self.grille_2_stack_5)
- groupe_3.setLayout(self.grille_3_stack_5)
- 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_5.setLayout(layout)
- # ==========================================
- # Signaux
- # ==========================================
- # Les boutons ajoutent des lignes pour les références artistiques et peuvent aussi les enlever
- self.bouton_ajout_ligne_ref_art.clicked.connect(self.ajouter_ref_artistique)
- self.bouton_supprime_ligne_ref_art.clicked.connect(self.supprimer_ref_artistique)
- 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) :
- """
- Merci à ekhumoro de m'avoir aidé ici pour la création des
- lignes de widgets ; voir la discussion ici sur stackoverflow :
- https://stackoverflow.com/questions/47380658/how-to-add-rows-of-widgets-after-deletion-in-a-qgridlayout
- """
- #
- r = len(self.liste_mots_vocabulaire)
- #if r >= 0 : self.label_annonce_vocab.hide()
- # Création des QTextEdit
- 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)
- # 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, 0)
- self.grille_3_stack_3.addWidget(self.dico_vocab_def[r], r, 1)
- # Ecriture des n°s de lignes dans la partie mots de vocabulaire
- self.dico_vocab_mot[r].setText(str(r+1)+'. ')
- # 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)
- # =====================================================
- def supprimer_un_mot_vocab(self) :
- """
- Merci à ekhumoro de m'avoir aidé ici pour la suppression des
- lignes de widgets ; voir la discussion ici sur stackoverflow :
- https://stackoverflow.com/questions/47380658/how-to-add-rows-of-widgets-after-deletion-in-a-qgridlayout
- """
- # On repère l'indice
- row = len(self.liste_mots_vocabulaire) - 1
- # Si l'indice de la ligne st supérieur ou egal à 0
- if row >= 0:
- for column in range(self.grille_3_stack_3.columnCount()):
- # On repère à quelle position se trouve l'item
- item = self.grille_3_stack_3.itemAtPosition(row, column)
- if item is not None:
- # On supprime l'item (le widget
- # correspondant est supprimé)
- item.widget().deleteLater()
- # On vide (à chaque passage) l'indice
- # correspondant dans la liste
- del self.liste_mots_vocabulaire[row]
- # On vide aussi à l'indice
- # correspondant chaque dictionnaire
- del self.dico_vocab_mot[row]
- del self.dico_vocab_def[row]
- def ajouter_une_question(self) :
- '''
- '''
- #
- r = len(self.liste_questions_pos_elev)
- #if r >= 0 : self.label_annonce_question.hide()
- self.dico_question_pos_elev[r] = QTextEdit()
- #self.dico_vocab_def[r] = QTextEdit()
- self.dico_question_pos_elev[r].setMaximumHeight(54)
- self.dico_question_pos_elev[r].setMinimumHeight(54)
- if r > 5 :
- self.dico_question_pos_elev[r].setMaximumHeight(34)
- self.dico_question_pos_elev[r].setMinimumHeight(34)
- self.grille_3_stack_4.addWidget(self.dico_question_pos_elev[r], r, 0)
- self.dico_question_pos_elev[r].setText(str(r+1)+'. ')
- self.liste_questions_pos_elev.append(self.dico_question_pos_elev[r])
- # =====================================================
- # Signal
- self.dico_question_pos_elev[r].textChanged.connect(self.changements_phase_4)
- # =====================================================
- def supprimer_la_question(self) :
- '''
- '''
- row = len(self.liste_questions_pos_elev) - 1
- if row >= 0:
- for column in range(self.grille_3_stack_4.columnCount()):
- item = self.grille_3_stack_4.itemAtPosition(row, column)
- if item is not None:
- item.widget().deleteLater()
- del self.liste_questions_pos_elev[row]
- del self.dico_question_pos_elev[row]
- #del self.dico_vocab_def[row]
- def ajouter_ref_artistique(self) :
- '''
- '''
- #
- r = len(self.liste_ref_artistiques)
- #if r >= 0 : self.label_annonce_vocab.hide()
- # Création des QTextEdit
- self.dico_chem_ref_art[r] = QTextEdit()
- self.dico_com_ref_art[r] = QTextEdit()
- self.dico_chem_ref_art[r].setMaximumWidth(170)
- self.dico_chem_ref_art[r].setMinimumWidth(170)
- self.dico_chem_ref_art[r].setMaximumHeight(84)
- self.dico_chem_ref_art[r].setMinimumHeight(84)
- self.dico_com_ref_art[r].setMaximumWidth(398)
- self.dico_com_ref_art[r].setMinimumWidth(398)
- self.dico_com_ref_art[r].setMaximumHeight(84)
- self.dico_com_ref_art[r].setMinimumHeight(84)
- # Création des boutons de chargement
- self.dico_bout_charg_ref_art[r] = QPushButton(u"Ouvrir ref {}".format(r+1))
- '''
- # 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_5.addWidget(self.dico_chem_ref_art[r], r, 0)
- self.grille_3_stack_5.addWidget(self.dico_com_ref_art[r], r, 1)
- self.grille_3_stack_5.addWidget(self.dico_bout_charg_ref_art[r], r, 2)
- # Ecriture des n°s de lignes dans la partie mots de vocabulaire
- self.dico_chem_ref_art[r].setText(str(r+1)+'. ')
- # Les données sont introduites dans une liste
- self.liste_ref_artistiques.append([self.dico_chem_ref_art[r], self.dico_com_ref_art[r], self.dico_bout_charg_ref_art[r]])
- # =====================================================
- # Signaux
- # ---------- Récup des données textuelles
- self.dico_chem_ref_art[r].textChanged.connect(self.changements_phase_5)
- self.dico_com_ref_art[r].textChanged.connect(self.changements_phase_5)
- # ---------- Récup du libellé du bouton sélectionné par l'utilisateur
- self.dico_bout_charg_ref_art[r].released.connect(self.libelle_bouton_ref_art)
- # =====================================================
- def supprimer_ref_artistique(self) :
- '''
- '''
- row = len(self.liste_ref_artistiques) - 1
- if row >= 0:
- for column in range(self.grille_3_stack_5.columnCount()):
- item = self.grille_3_stack_5.itemAtPosition(row, column)
- if item is not None:
- item.widget().deleteLater()
- del self.liste_ref_artistiques[row]
- del self.dico_chem_ref_art[row]
- del self.dico_com_ref_art[row]
- del self.dico_bout_charg_ref_art[row]
- 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 changements_phase_4(self) :
- """
- """
- self.liste_questions_pos_elev_finale = [unicode(quest.toPlainText()) for quest in self.liste_questions_pos_elev]
- print
- print "self.liste_questions_pos_elev_finale :"
- print
- print self.liste_questions_pos_elev_finale
- print
- def changements_phase_5(self) :
- """
- """
- self.liste_ref_artistiques_finale = [[unicode(refart[0].toPlainText()), unicode(refart[1].toPlainText()), unicode(refart[2])] for refart in self.liste_ref_artistiques]
- print
- print "self.liste_ref_artistiques_finale :"
- print
- print self.liste_ref_artistiques_finale
- print
- def libelle_bouton_ref_art(self) :
- '''
- Sélectionner l'id du bouton pressé en vue de
- l'affichage du chemin de l'image sélectionnée
- dans le QTextEdit dédié
- '''
- #
- message_bouton_ref_art = self.sender()
- # Le texte du bouton (par ex pour le bouton n°2) est
- # de la forme : Ouvrir ref 2
- texte_bouton = message_bouton_ref_art.text()
- # On ne sélectionne que le texte comprenant le numéro
- # du bouton
- numero_bouton = texte_bouton.right(2) # Lecture à partir de la droite
- # Si il y a un espace ds la sélection, c'est à dire,
- # par exemple, pour le 3ème bouton on obtiendra " 3",
- # ... si il y 10 boutons, on aura "10" (on se laisse
- # la possibilité de pouvoir sélectionner de 1 à 99
- # boutons)
- if numero_bouton[0:1] == " ": numero_bouton = numero_bouton[1:2]
- # Le numéro du bouton prend le type integer
- numero_bouton = int(numero_bouton)
- # Attribution de l'indice du bouton
- i = numero_bouton - 1
- # =====================================================
- # Signal
- # ---------- Affichage des images/vignettes et chemins images
- self.dico_bout_charg_ref_art[i].clicked.connect(lambda: self.ouvrir_image_boite_ref_art(i))
- # =====================================================
- def ouvrir_image_boite_ref_art(self, n) :
- ''' Fonction pour la boîte de dialogue d'ouverture
- pour charger les différentes oeuvres (références artistiques) '''
- # La boîte
- ouv_fichier = QFileDialog.getOpenFileName(self, 'Ouvrir une image', os.path.expanduser('~'), 'Images (*.jpg *.jpeg *.JPG *.JPEG *.png *.gif)')
- # Récup du chemin et nom de fichier
- chemin_fichier_ref_art = unicode(ouv_fichier)
- # === Redimensionnnement de l'image pour affichage dans le QTextEdit ======
- # Largeur de la future vignette
- nouv_w_1 = 120
- # Ouverture de l'image
- obImg_1 = Image.open(chemin_fichier_ref_art)
- # Recup dimensions de l'image 1)
- w_1, h_1 = obImg_1.size
- # Calcul du ratio de l'image 1)
- ratio_1 = float(w_1)/float(h_1)
- # Calcul de future hauteur avec les dimensions donnees par l'utilisateur
- calcHauteur_img_1 = int(float(nouv_w_1)/ratio_1)
- # =========================================================================
- # Affichage de l'image dans le QTextEdit
- self.dico_chem_ref_art[n].setHtml('<center><img src="{}" width="{}" height="{}" title="{}" /></center><h6><b>{}</b></h6>'.format(chemin_fichier_ref_art, nouv_w_1, calcHauteur_img_1, chemin_fichier_ref_art, chemin_fichier_ref_art))
- # La liste finale des données est réactualisée avec les
- # nouvelles données (le chemin et nom de l'image chargée)
- del self.liste_ref_artistiques_finale[n][0]
- self.liste_ref_artistiques_finale[n].insert(0, chemin_fichier_ref_art)
- def affiche_phases(self,i):
- self.stack.setCurrentIndex(i)
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- matable = EssaiQStackedWidget_Seq_Prof()
- matable.show()
- app.exec_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement