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 (Niveau de classe, ..., Titre progression, Incitation, Demande, ...)", u"Phase 2 de construction de la séquence du professeur (Questionnement, Que vont apprendre les élèves, ...)", u"Phase 3 de construction de la séquence du professeur (Mots de vocabulaire et leurs définitions)", u"Phase 4 de construction de la séquence du professeur (Questions posées aux élèves)", u"Phase 5 de construction de la séquence du professeur (Références artistiques)", u"Phase 6 de construction de la séquence du professeur (Compétences travaillées, évaluation)"]
- 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(4, u"Références artistiques", Qt.ToolTipRole)
- self.liste_menu.setItemData(5, u"Compétences travaillées, évaluation", 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.w_menu_stack_6 = QWidget()
- self.stack_phase_1()
- self.stack_phase_2()
- self.stack_phase_3()
- self.stack_phase_4()
- self.stack_phase_5()
- self.stack_phase_6()
- 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)
- self.stack.addWidget(self.w_menu_stack_6)
- 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 artistiques
- # -----------------------
- 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
- # -----------------------
- self.liste_ref_artistiques = []
- # -----------------------
- # Dictionnaire des dimensions (largeur, hauteur) des images
- # références artistiques (transformées en vignettes)
- # -----------------------
- self.dico_ref_art_w_h_vignettes = {}
- # Phase 6
- # -----------------------
- # Dictionnaire du combo des compétences travaillées
- # -----------------------
- self.dico_combo_compet_travail = {}
- # -----------------------
- # Dictionnaire pour la traduction des compétences travaillées
- # Il s'agit des compétences travaillées traduites pour l'élève
- # -----------------------
- self.dico_traduc_compet_travail = {}
- # -----------------------
- # Dictionnaire des domaines du socle commun associés
- # aux compétences travaillées
- # -----------------------
- self.dico_domaines_du_socle = {}
- # -----------------------
- # Dictionnaire des domaines du socle commun associés
- # aux compétences travaillées
- # -----------------------
- self.dico_spinbox_pts_chiffres = {}
- # -----------------------
- # Liste pour chargement des données
- # -----------------------
- self.liste_compet_travail_socle_eval = []
- # ================================================
- # Initialisation de la listes de récup des données
- self.liste_donnees = []
- # ================================================
- # 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)
- # ============================================= #
- # 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)
- # ==========================================
- # 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)
- # ------------------
- # Les cases à cocher sont cachées par défaut
- # ------------------
- self.caseEntr_1_Prog.hide()
- # 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_2_Prog.hide()
- self.caseEntr_3_Prog = QRadioButton(u"EPI")
- self.caseEntr_3_Prog.hide()
- self.caseEntr_4_Prog = QRadioButton(u"PEAC")
- self.caseEntr_4_Prog.hide()
- # Cases à cocher pour la sélection du champ des pratiques plastiques
- # ------------------
- # Les cases à cocher sont cachées par défaut
- # ------------------
- self.case_prat_plast_1 = QCheckBox(u"Pratiques\nbidimensionnelles")
- self.case_prat_plast_1.hide()
- self.case_prat_plast_2 = QCheckBox(u"Pratiques\ntridimensionnelles")
- self.case_prat_plast_2.hide()
- self.case_prat_plast_3 = QCheckBox(u"Pratiques artistiques\nde l'image fixe et\nanimée")
- self.case_prat_plast_3.hide()
- self.case_prat_plast_4 = QCheckBox(u"Pratiques de la création\nartistique numérique")
- self.case_prat_plast_4.hide()
- # 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)
- #############################################
- # Insertion d'un QScrollArea (ascenceur)
- # ==========================================
- # Merci à eylianesc sur stackoverflow pour l'aide apportée pour coder l'ascenceur, voir ici :
- # https://stackoverflow.com/questions/47491386/pyqt4-add-a-qsrollarea-on-a-group-of-widgets/47492009#47492009
- # ==========================================
- scrollArea = QScrollArea(self)
- scrollArea.setWidgetResizable(True)
- wid = QWidget(self)
- scrollArea.setWidget(wid)
- self.grille_3_stack_3 = QGridLayout(wid)
- 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)
- #############################################
- # 2ème partie de l'ajout du QScrollArea
- groupe_3.setLayout(QVBoxLayout())
- groupe_3.layout().addWidget(scrollArea)
- #############################################
- 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)
- #############################################
- # Insertion d'un QScrollArea (ascenceur)
- # ==========================================
- # Merci à eylianesc sur stackoverflow pour l'aide apportée pour coder l'ascenceur, voir ici :
- # https://stackoverflow.com/questions/47491386/pyqt4-add-a-qsrollarea-on-a-group-of-widgets/47492009#47492009
- # ==========================================
- scrollArea = QScrollArea(self)
- scrollArea.setWidgetResizable(True)
- wid = QWidget(self)
- scrollArea.setWidget(wid)
- self.grille_3_stack_4 = QGridLayout(wid)
- 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)
- #############################################
- # 2ème partie de l'ajout du QScrollArea
- groupe_3.setLayout(QVBoxLayout())
- groupe_3.layout().addWidget(scrollArea)
- #############################################
- 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(136)
- #############################################
- # Insertion d'un QScrollArea (ascenceur)
- # ==========================================
- # Merci à eylianesc sur stackoverflow pour l'aide apportée pour coder l'ascenceur, voir ici :
- # https://stackoverflow.com/questions/47491386/pyqt4-add-a-qsrollarea-on-a-group-of-widgets/47492009#47492009
- # ==========================================
- scrollArea = QScrollArea(self)
- scrollArea.setWidgetResizable(True)
- wid = QWidget(self)
- scrollArea.setWidget(wid)
- self.grille_3_stack_5 = QGridLayout(wid)
- 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"Bouton pour charger l'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")
- # 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)
- #############################################
- # 2ème partie de l'ajout du QScrollArea
- groupe_3.setLayout(QVBoxLayout())
- groupe_3.layout().addWidget(scrollArea)
- #############################################
- 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 stack_phase_6(self) :
- '''
- '''
- # Widgets groupés
- groupe_1 = QGroupBox()
- groupe_2 = QGroupBox()
- groupe_3 = QGroupBox()
- self.grille_1_stack_6 = QGridLayout()
- self.grille_1_stack_6.setSpacing(0)
- self.grille_2_stack_6 = QGridLayout()
- self.grille_2_stack_6.setSpacing(136)
- #############################################
- # Insertion d'un QScrollArea (ascenceur)
- # ==========================================
- # Merci à eylianesc sur stackoverflow pour l'aide apportée pour coder l'ascenceur, voir ici :
- # https://stackoverflow.com/questions/47491386/pyqt4-add-a-qsrollarea-on-a-group-of-widgets/47492009#47492009
- # ==========================================
- scrollArea = QScrollArea(self)
- scrollArea.setWidgetResizable(True)
- wid = QWidget(self)
- scrollArea.setWidget(wid)
- self.grille_3_stack_6 = QGridLayout(wid)
- self.grille_3_stack_6.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_compet_travail = QLabel(u"Compétences travaillées")
- label_traduc_compet_travail = QLabel(u"Traduction de la compétence")
- #label_traduc_compet_travail.setGeometry(QRect(300, 300, 300, 100))
- label_domaines_socle = QLabel(u"Domaines du socle")
- label_criteres_eval_chiffree = QLabel(u"Points chiffrés")
- # ==========================================
- # Widgets Stacked 5
- # ==========================================
- # Bouton pour ajouter une ligne pour les références artistiques
- self.bouton_ajout_ligne_eval = QPushButton(u"Ajouter une ligne d'évaluation")
- # Bouton pour supprimer une ligne pour les références artistiques
- self.bouton_supprime_ligne_eval = QPushButton(u"Supprimer une ligne d'évaluation")
- # Disposition dans la grille (stacked 5)
- self.grille_1_stack_6.addWidget(self.bouton_ajout_ligne_eval, 0, 0)
- self.grille_1_stack_6.addWidget(self.bouton_supprime_ligne_eval, 0, 1)
- self.grille_2_stack_6.addWidget(label_compet_travail, 0, 0, 1, 1)
- self.grille_2_stack_6.addWidget(label_traduc_compet_travail, 0, 1, 1, 1)
- self.grille_2_stack_6.addWidget(label_domaines_socle, 0, 2, 1, 1)
- self.grille_2_stack_6.addWidget(label_criteres_eval_chiffree, 0, 3, 1, 1)
- #self.grille_3_stack_5.addWidget(self.label_annonce_ref_art, 0, 0)
- # ============================================= #
- groupe_1.setLayout(self.grille_1_stack_6)
- groupe_2.setLayout(self.grille_2_stack_6)
- #############################################
- # 2ème partie de l'ajout du QScrollArea
- groupe_3.setLayout(QVBoxLayout())
- groupe_3.layout().addWidget(scrollArea)
- #############################################
- 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_6.setLayout(layout)
- # ==========================================
- # Signaux
- # ==========================================
- # Les boutons ajoutent des lignes pour les et peuvent aussi les enlever
- self.bouton_ajout_ligne_eval.clicked.connect(self.ajouter_eval)
- self.bouton_supprime_ligne_eval.clicked.connect(self.supprimer_eval)
- 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
- # Les cases à cocher de l'Entrée principale
- # du programme et le Champ des pratiques
- # plastiques apparaissent quand l'utilisateur
- # a renseigné le niveau de classe
- if self.classe != 0 :
- self.caseEntr_1_Prog.show()
- self.caseEntr_2_Prog.show()
- self.caseEntr_3_Prog.show()
- self.caseEntr_4_Prog.show()
- self.case_prat_plast_1.show()
- self.case_prat_plast_2.show()
- self.case_prat_plast_3.show()
- self.case_prat_plast_4.show()
- # Le texte introduit va aider à ce qu'il n'y
- # ait pas d'erreur au niveau de l'Entrée principale
- # du programme et le Champ des pratiques plastiques
- self.ligne_duree.setText(u" ")
- # Pareil ici pour le QTextEdit Question d'enseignement
- self.texte_question_denseignement.insertPlainText(u" ")
- 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
- if c.isChecked() == False :
- # Si la case est décochée on retire
- # Pratiques bidimensionnelles de la liste
- # 0 est réinséré
- self.liste_champ_prat_plast[0] = 0
- #
- 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
- if c.isChecked() == False :
- # Si la case est décochée on retire
- # Pratiques tridimensionnelles de la liste
- # 0 est réinséré
- self.liste_champ_prat_plast[1] = 0
- #
- 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
- if c.isChecked() == False :
- # Si la case est décochée on retire
- # Pratiques artistiques de l'image fixe
- # et animée de la liste 0 est réinséré
- self.liste_champ_prat_plast[2] = 0
- #
- 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
- if c.isChecked() == False :
- # Si la case est décochée on retire
- # Pratiques artistiques de la création
- # artistique numérique de la liste 0 est réinséré
- self.liste_champ_prat_plast[3] = 0
- #
- 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(64)
- self.dico_vocab_mot[r].setMinimumHeight(64)
- self.dico_vocab_def[r].setMaximumHeight(64)
- self.dico_vocab_def[r].setMinimumHeight(64)
- # 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_question_pos_elev[r].setMaximumHeight(64)
- self.dico_question_pos_elev[r].setMinimumHeight(64)
- 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]
- 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(150)
- self.dico_chem_ref_art[r].setMinimumWidth(150)
- self.dico_chem_ref_art[r].setMaximumHeight(84)
- self.dico_chem_ref_art[r].setMinimumHeight(84)
- self.dico_com_ref_art[r].setMaximumWidth(500)
- self.dico_com_ref_art[r].setMinimumWidth(500)
- 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 référence art. {}".format(r+1))
- # 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
- 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]
- # Le dictionnaire des valeurs de largeur
- # et de hauteur de l'image (en vignette)
- # chargé dans les références artistiques
- # est réactualisé quand quand une ligne
- # est supprimée
- del self.dico_ref_art_w_h_vignettes[row]
- print 'self.dico_ref_art_w_h_vignettes', self.dico_ref_art_w_h_vignettes
- def ajouter_eval(self) :
- '''
- '''
- # Liste des compétences travaillées en classe de 6ème
- liste_c_t_6e = [u"Faites le choix de votre item ici.", u"(E1) Choisir, organiser et mobiliser des gestes, des outils et des matériaux en fonction des effets qu'ils produisent.", \
- u"(E2) Représenter le monde environnant ou donner forme à son imaginaire en explorant divers domaines (dessin, collage, modelage, sculpture, photographie, vidéo...).", \
- u"(E3) Rechercher une expression personnelle en s'éloignant des stéréotypes.", u"(E4) Intégrer l'usage des outils informatiques de travail de l'image et de recherche d'information, au service de la pratique plastique.", \
- u"(P1) Identifier les principaux outils et compétences nécessaires à la réalisation d'un projet artistique.", u"(P2) Se repérer dans les étapes de la réalisation d'une production plastique individuelle ou collective, anticiper les difficultés éventuelles.", \
- u"(P3) Identifier et assumer sa part de responsabilité dans un processus coopératif de création.", u"(P4) Adapter son projet en fonction des contraintes de réalisation et de la prise en compte du spectateur.", \
- u"(A1) Décrire et interroger à l'aide d'un vocabulaire spécifique ses productions plastiques, celles de ses pairs et des oeuvres d'art étudiées en classe.", \
- u"(A2) Justifier des choix pour rendre compte du cheminement qui conduit de l'intention à la réalisation.", \
- u"(A3) Formuler une expression juste de ses émotions, en prenant appui sur ses propres réalisations plastiques, celles des autres élèves et des oeuvres d'art.", \
- u"(R1) Repérer, pour les dépasser, certains a priori et stéréotypes culturels et artistiques.", \
- u"(R2) Identifier quelques caractéristiques qui inscrivent une oeuvre d'art dans une aire géographique ou culturelle et dans un temps historique, contemporain, proche ou lointain.", \
- u"(R3) Décrire des oeuvres d'art, en proposer une compréhension personnelle argumentée."]
- # Liste des compétences travaillées pour les classes de 5ème, 4ème et 3ème
- liste_c_t_5e4e3e = [u"Faites le choix de votre item ici.", u"(E1) Choisir, mobiliser et adapter des langages et des moyens plastiques variés en fonction de leurs effets dans une intention artistique en restant attentif à l'inattendu.", \
- u"(E2) S'approprier des questions artistiques en prenant appui sur une pratique artistique et réflexive.", u"(E3) Recourir à des outils numériques de captation et de réalisation à des fins de création artistique.", \
- u"(E4) Explorer l'ensemble des champs de la pratique plastique et leurs hybridations, notamment avec les pratiques numériques.", \
- u"(E5) Prendre en compte les conditions de la réception de sa production dès la démarche de création, en prêtant attention aux modalités de sa présentation, y compris numérique.", u"(E6) Exploiter des informations et de la documentation, notamment iconique, pour servir un projet de création.", \
- u"(P1) Concevoir, réaliser, donner à voir des projets artistiques, individuels ou collectifs.", u"(P2) Mener à terme une production individuelle dans le cadre d'un projet accompagné par le professeur.", \
- u"(P3) Se repérer dans les étapes de la réalisation d'une production plastique et en anticiper des difficultés éventuelles.", u"(P4) Faire preuve d'autonomie, d'initiative, de responsabilité, d'engagement et d'esprit critique dans la conduite d'un projet artistique.", \
- u"(P5) Confronter intention et réalisation dans la conduite d'un projet pour l'adapter et le réorienter, s'assurer de la dimension artistique de celui-ci.", \
- u"(A1) Dire avec un vocabulaire approprié ce que l'on fait, ressent, imagine, observe, analyse; s'exprimer pour soutenir des intentions artistiques ou une interprétation d'oeuvre.", u"(A2) Établir des liens entre son propre travail, les oeuvres rencontrées ou les démarches observées.", \
- u"(A3) Expliciter la pratique individuelle ou collective, écouter et accepter les avis divers et contradictoires.", u"(A4) Porter un regard curieux et avisé sur son environnement artistique et culturel, proche et lointain, notamment sur la diversité des images fixes et animées, analogiques et numériques.", \
- u"(R1) Reconnaître et connaître des oeuvres de domaines et d'époques variés appartenant au patrimoine national et mondial, en saisir le sens et l'intérêt.", \
- u"(R2) Identifier des caractéristiques (plastiques, culturelles, sémantiques, symboliques) inscrivant une oeuvre d'art dans une aire géographique ou culturelle et dans un temps historique.", u"(R3) Proposer et soutenir l'analyse et l'interprétation d'une oeuvre.", \
- u"(R4) Interroger et situer oeuvres et démarches artistiques du point de vue de l'auteur et de celui du spectateur.", u"(R5) Prendre part au débat suscité par le fait artistique."]
- # Liste des items du domaine du socle
- liste_items_socle = [u"Faites le choix de votre item ici.", u"(D1-1-1-1) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Parler/communiquer/écouter", u"(D1-1-1-2) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Lire", \
- u"(D1-1-1-3) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Ecrire", u"(D1-1-1-4) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Utiliser les règles de la langue", \
- u"(D1-1-1-5) Comprendre, s'exprimer en utilisant la langue française à l'écrit et à l'oral > Apprendre les origines de la langue française", u"(D1-2-2-1) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Pratiquer deux langues", \
- u"(D1-2-2-2) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Comprendre, s'exprimer en langue étrangère", u"(D1-2-2-3) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Dialoguer en langue étrangère" \
- u"(D1-2-2-4) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Adapter le niveau de langue étrangère à la situation", u"(D1-2-2-5) Comprendre, s'exprimer en utilisant une langue étrangère et, les cas échéant, une langue régionale > Communiquer dans le quotidien en langue étrangère", \
- u"(D1-3-3-1) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Utiliser système décimal et langages formels", u"(D1-3-3-2) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Lire les plans, se repérer sur des cartes", \
- u"(D1-3-3-3) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Produire et utiliser des représentations", u"(D1-3-3-4) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Savoir les utilisations des langages informatiques", \
- u"(D1-3-3-5) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Connaître les principes d'algorithmique et de programmation", u"(D1-3-3-6) Comprendre, s'exprimer en utilisant les langages mathématiques, scientifiques et informatiques > Créer des applications simples", \
- u"(D1-4-4-1) Comprendre, s'exprimer en utilisant les langages des arts et du corps > S'exprimer et communiquer par les arts", u"(D1-4-4-2) Comprendre, s'exprimer en utilisant les langages des arts et du corps > Connaître, comprendre les langages artistiques utilisés", \
- u"(D1-4-4-3) Comprendre, s'exprimer en utilisant les langages des arts et du corps > S'exprimer par des activités, physiques, sportives ou artistiques", u"(D2-1-1) Organisation du travail personnel > Anticiper/gérer/mémoriser/planifier", \
- u"(D2-1-2) Organisation du travail personnel > Comprendre des consignes", u"(D2-1-3) Organisation du travail personnel > Mettre en oeuvre les capacités essentielles", u"(D2-1-4) Organisation du travail personnel > Identifier et résoudre un problème", \
- u"(D2-1-5) Organisation du travail personnel > Se constituer des outils personnels", u"(D2-2-1) Coopération et réalisation de projets > Travailler en équipe", u"(D2-2-2) Coopération et réalisation de projets > Gérer un projet", u"(D2-2-3) Coopération et réalisation de projets > Savoir que l'école est un lieu des savoirs", \
- u"(D2-2-4) Coopération et réalisation de projets > Utiliser des outils numériques", u"(D2-3-1) Médias, démarches de recherche et de traitement de l'information > Histoire de l'écrit, modes de production de l'image", u"(D2-3-2) Médias, démarches de recherche et de traitement de l'information > Utiliser des outils de recherche", \
- u"(D2-3-3) Médias, démarches de recherche et de traitement de l'information > Traiter les informations collectées, organiser, mémoriser", ]
- #
- r = len(self.liste_compet_travail_socle_eval)
- #if r >= 0 : self.label_annonce_vocab.hide()
- # Création du combo pour sélection des compétences travaillées
- self.dico_combo_compet_travail[r] = QComboBox()
- self.dico_combo_compet_travail[r].setMaximumWidth(250)
- self.dico_combo_compet_travail[r].setMinimumWidth(250)
- # Création du QTextEdit
- self.dico_traduc_compet_travail[r] = QTextEdit()
- self.dico_traduc_compet_travail[r].setMaximumWidth(280)
- self.dico_traduc_compet_travail[r].setMinimumWidth(280)
- self.dico_traduc_compet_travail[r].setMaximumHeight(54)
- self.dico_traduc_compet_travail[r].setMinimumHeight(54)
- # Création du combo pour sélection du domaine du socle
- self.dico_domaines_du_socle[r] = QComboBox()
- self.dico_domaines_du_socle[r].setMaximumWidth(240)
- self.dico_domaines_du_socle[r].setMinimumWidth(240)
- # ------------------------------
- self.dico_domaines_du_socle[r].addItems(liste_items_socle)
- # ------------------------------
- # Création des spinbox
- self.dico_spinbox_pts_chiffres[r] = QSpinBox()
- self.dico_spinbox_pts_chiffres[r].setRange(0, 60)
- # ------------------------------
- # Conditions de remplissage du combo (cycle 3 ou cycle 4)
- # pour les compétences travaillées
- # ------------------------------
- # 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)
- elif self.classe == u'6' :
- self.dico_combo_compet_travail[r].addItems(liste_c_t_6e)
- elif self.classe in [u'5', u'4', u'3']:
- self.dico_combo_compet_travail[r].addItems(liste_c_t_5e4e3e)
- # ------------------------------
- # Répartition dans la grille
- self.grille_3_stack_6.addWidget(self.dico_combo_compet_travail[r], r, 0)
- self.grille_3_stack_6.addWidget(self.dico_traduc_compet_travail[r], r, 1)
- self.grille_3_stack_6.addWidget(self.dico_domaines_du_socle[r], r, 2)
- self.grille_3_stack_6.addWidget(self.dico_spinbox_pts_chiffres[r], r, 3)
- # Ecriture des n°s de lignes
- self.dico_traduc_compet_travail[r].setText(str(r+1)+'. ')
- # Les données sont introduites dans une liste
- self.liste_compet_travail_socle_eval.append([self.dico_combo_compet_travail[r], self.dico_traduc_compet_travail[r], self.dico_domaines_du_socle[r], self.dico_spinbox_pts_chiffres[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_eval(self) :
- '''
- '''
- row = len(self.liste_compet_travail_socle_eval) - 1
- if row >= 0:
- for column in range(self.grille_3_stack_6.columnCount()):
- item = self.grille_3_stack_6.itemAtPosition(row, column)
- if item is not None:
- item.widget().deleteLater()
- del self.liste_compet_travail_socle_eval[row]
- del self.dico_combo_compet_travail[row]
- del self.dico_traduc_compet_travail[row]
- del self.dico_domaines_du_socle[row]
- del self.dico_spinbox_pts_chiffres[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]
- 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) :
- """
- """
- # Le : \ufffc\n est retiré du chemin de l'image, par le hachage [2:]
- self.liste_ref_artistiques_finale = [[unicode(refart[0].toPlainText())[2:], 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) '''
- try :
- # 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 = 120
- # Ouverture de l'image
- obImg = Image.open(chemin_fichier_ref_art)
- # Recup dimensions de l'image
- w, h = obImg.size
- # Calcul du ratio de l'image
- ratio = float(w)/float(h)
- # Calcul de future hauteur avec les dimensions donnees par l'utilisateur
- calcHauteur_img = int(float(nouv_w)/ratio)
- # =========================================================================
- # 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, calcHauteur_img, 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)
- # Le dictionnaire est rempli avec les nouvelles données
- # (dans le QTextEdit dédié) de largeur et de hauteur
- # de l'image chargée par l'utilisateur (et ce avec le
- # bouton qu'il faut)
- #if n in self.dico_ref_art_w_h_vignettes.keys() :
- # del self.dico_ref_art_w_h_vignettes[n]
- self.dico_ref_art_w_h_vignettes[n] = (nouv_w, calcHauteur_img)
- print
- print 'self.dico_ref_art_w_h_vignettes', self.dico_ref_art_w_h_vignettes
- print
- except : pass
- 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