Skip to content

Instantly share code, notes, and snippets.

@eyllanesc
Last active November 26, 2017 00:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eyllanesc/c6e43c659fe4e002ad1032ed83edf731 to your computer and use it in GitHub Desktop.
Save eyllanesc/c6e43c659fe4e002ad1032ed83edf731 to your computer and use it in GitHub Desktop.
# -*- 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
print "self.liste_mots_vocabulaire_finale :"
print
print self.liste_mots_vocabulaire_finale
print
def changements_phase_4(self) :
"""
"""
self.liste_questions_pos_elev_finale = [unicode(quest.toPlainText()) for quest in self.liste_questions_pos_elev]
print
print "self.liste_questions_pos_elev_finale :"
print
print self.liste_questions_pos_elev_finale
print
def changements_phase_5(self) :
"""
"""
self.liste_ref_artistiques_finale = [[unicode(refart[0].toPlainText()), unicode(refart[1].toPlainText()), unicode(refart[2])] for refart in self.liste_ref_artistiques]
print
print "self.liste_ref_artistiques_finale :"
print
print self.liste_ref_artistiques_finale
print
def libelle_bouton_ref_art(self) :
'''
Sélectionner l'id du bouton pressé en vue de
l'affichage du chemin de l'image sélectionnée
dans le QTextEdit dédié
'''
#
message_bouton_ref_art = self.sender()
# Le texte du bouton (par ex pour le bouton n°2) est
# de la forme : Ouvrir ref 2
texte_bouton = message_bouton_ref_art.text()
# On ne sélectionne que le texte comprenant le numéro
# du bouton
numero_bouton = texte_bouton.right(2) # Lecture à partir de la droite
# Si il y a un espace ds la sélection, c'est à dire,
# par exemple, pour le 3ème bouton on obtiendra " 3",
# ... si il y 10 boutons, on aura "10" (on se laisse
# la possibilité de pouvoir sélectionner de 1 à 99
# boutons)
if numero_bouton[0:1] == " ": numero_bouton = numero_bouton[1:2]
# Le numéro du bouton prend le type integer
numero_bouton = int(numero_bouton)
# Attribution de l'indice du bouton
i = numero_bouton - 1
# =====================================================
# Signal
# ---------- Affichage des images/vignettes et chemins images
self.dico_bout_charg_ref_art[i].clicked.connect(lambda: self.ouvrir_image_boite_ref_art(i))
# =====================================================
def ouvrir_image_boite_ref_art(self, n) :
''' Fonction pour la boîte de dialogue d'ouverture
pour charger les différentes oeuvres (références artistiques) '''
# La boîte
ouv_fichier = QFileDialog.getOpenFileName(self, 'Ouvrir une image', os.path.expanduser('~'), 'Images (*.jpg *.jpeg *.JPG *.JPEG *.png *.gif)')
# Récup du chemin et nom de fichier
chemin_fichier_ref_art = unicode(ouv_fichier)
# === Redimensionnnement de l'image pour affichage dans le QTextEdit ======
# Largeur de la future vignette
nouv_w_1 = 120
# Ouverture de l'image
obImg_1 = Image.open(chemin_fichier_ref_art)
# Recup dimensions de l'image 1)
w_1, h_1 = obImg_1.size
# Calcul du ratio de l'image 1)
ratio_1 = float(w_1)/float(h_1)
# Calcul de future hauteur avec les dimensions donnees par l'utilisateur
calcHauteur_img_1 = int(float(nouv_w_1)/ratio_1)
# =========================================================================
# Affichage de l'image dans le QTextEdit
self.dico_chem_ref_art[n].setHtml('<center><img src="{}" width="{}" height="{}" title="{}" /></center><h6><b>{}</b></h6>'.format(chemin_fichier_ref_art, nouv_w_1, calcHauteur_img_1, chemin_fichier_ref_art, chemin_fichier_ref_art))
# La liste finale des données est réactualisée avec les
# nouvelles données (le chemin et nom de l'image chargée)
del self.liste_ref_artistiques_finale[n][0]
self.liste_ref_artistiques_finale[n].insert(0, chemin_fichier_ref_art)
def affiche_phases(self,i):
self.stack.setCurrentIndex(i)
if __name__ == '__main__':
app = QApplication(sys.argv)
matable = EssaiQStackedWidget_Seq_Prof()
matable.show()
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment