Last active
November 26, 2017 00:53
-
-
Save eyllanesc/c6e43c659fe4e002ad1032ed83edf731 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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) | |
""" | |
Changes | |
""" | |
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"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) | |
# changes | |
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 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 "self.liste_mots_vocabulaire_finale :" | |
print self.liste_mots_vocabulaire_finale | |
def changements_phase_4(self) : | |
""" | |
""" | |
self.liste_questions_pos_elev_finale = [unicode(quest.toPlainText()) for quest in self.liste_questions_pos_elev] | |
print "self.liste_questions_pos_elev_finale :" | |
print self.liste_questions_pos_elev_finale | |
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 "self.liste_ref_artistiques_finale :" | |
print self.liste_ref_artistiques_finale | |
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_() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment