SHARE
TWEET

Untitled

a guest Nov 25th, 2017 81 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # -*- coding: utf-8 -*-
  2.  
  3. #!/usr/bin/python
  4. #-*- coding: utf-8 -*-
  5.  
  6. from PyQt4.QtGui import *
  7. from PyQt4.QtCore import *
  8. import sys, os
  9. from PIL import Image
  10.  
  11. class EssaiQStackedWidget_Seq_Prof(QWidget) :
  12.     # Classe essai QTable Widget
  13.     def __init__(self, parent=None):
  14.         super(EssaiQStackedWidget_Seq_Prof, self).__init__(parent)
  15.  
  16.         self.setWindowTitle("Essai QStackedWidget Seq Prof")
  17.         self.resize(400, 540)
  18.         self.setGeometry(0, 0, 400, 540)
  19.  
  20.         groupe_1 = QGroupBox()
  21.  
  22.         # La liste du menu se fait par
  23.         # l'interm√©diaire d'un QComBoBox
  24.         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']
  25.         self.liste_menu = QComboBox()
  26.         self.liste_menu.setMinimumHeight(36)
  27.         self.liste_menu.addItems(liste)
  28.         # ToolTips sur les items de la combo
  29.         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)
  30.         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)
  31.         self.liste_menu.setItemData(2, u"Vocabulaire", Qt.ToolTipRole)
  32.         self.liste_menu.setItemData(3, u"Questions pos√©es aux √©l√®ves", Qt.ToolTipRole)
  33.         self.liste_menu.setItemData(3, u"R√©f√©rences artistiques", Qt.ToolTipRole)
  34.  
  35.         self.w_menu_stack_1 = QWidget()
  36.         self.w_menu_stack_2 = QWidget()
  37.         self.w_menu_stack_3 = QWidget()
  38.         self.w_menu_stack_4 = QWidget()
  39.         self.w_menu_stack_5 = QWidget()
  40.  
  41.         self.stack_phase_1()
  42.         self.stack_phase_2()
  43.         self.stack_phase_3()
  44.         self.stack_phase_4()
  45.         self.stack_phase_5()
  46.  
  47.         self.stack = QStackedWidget(self)
  48.         self.stack.addWidget(self.w_menu_stack_1)
  49.         self.stack.addWidget(self.w_menu_stack_2)
  50.         self.stack.addWidget(self.w_menu_stack_3)
  51.         self.stack.addWidget(self.w_menu_stack_4)
  52.         self.stack.addWidget(self.w_menu_stack_5)
  53.  
  54.         hbox = QVBoxLayout(self)
  55.         hbox.addWidget(self.liste_menu)
  56.         hbox.addWidget(self.stack)
  57.  
  58.         self.setLayout(hbox)
  59.  
  60.         # Phase 3
  61.         # -----------------------
  62.         # Dictionnaire des mots de vocabulaire
  63.         # -----------------------
  64.         self.dico_vocab_mot = {}
  65.         # -----------------------
  66.         # Dictionnaire des d√©finitions des mots de vocabulaire
  67.         # -----------------------
  68.         self.dico_vocab_def = {}
  69.         # -----------------------
  70.         # Liste pour chargement des donn√©es
  71.         # (√©criture des textes par l'utilisateur)
  72.         # -----------------------
  73.         self.liste_mots_vocabulaire = []
  74.        
  75.         # Phase 4
  76.         # -----------------------
  77.         # Dictionnaire des questions
  78.         # pos√©es aux √©l√®ves
  79.         # -----------------------
  80.         self.dico_question_pos_elev = {}
  81.         # -----------------------
  82.         # Liste pour chargement des donn√©es
  83.         # (√©criture des textes par l'utilisateur)
  84.         # -----------------------
  85.         self.liste_questions_pos_elev = []
  86.        
  87.         # Phase 5
  88.         # -----------------------
  89.         # Dictionnaire du chemin des r√©f√©rences aristiques
  90.         # -----------------------
  91.         self.dico_chem_ref_art = {}
  92.         # -----------------------
  93.         # Dictionnaire des commentaires des r√©f√©rences artistiques
  94.         # -----------------------
  95.         self.dico_com_ref_art = {}
  96.         # -----------------------
  97.         # Dictionnaire des QPushButton de chargement r√©f√©rences artistiques
  98.         # -----------------------
  99.         self.dico_bout_charg_ref_art = {}
  100.         # -----------------------
  101.         # Liste pour chargement des donn√©es
  102.         # (√©criture des textes par l'utilisateur)
  103.         # -----------------------
  104.         self.liste_ref_artistiques = []
  105.  
  106.         # Signal
  107.         self.liste_menu.currentIndexChanged.connect(self.affiche_phases)
  108.  
  109.     def stack_phase_1(self):
  110.         '''
  111.         '''
  112.         # Widgets group√©s
  113.         groupe_1 = QGroupBox()
  114.         groupe_2 = QGroupBox()
  115.  
  116.         grid_1 = QGridLayout()
  117.         grid_1.setSpacing(0)
  118.  
  119.         grid_2 = QGridLayout()
  120.         grid_2.setSpacing(0)
  121.  
  122.         # ==========================================
  123.         # Labels Stacked 1
  124.         # ==========================================
  125.         label_classe = QLabel(u"Niveau de classe :")
  126.         label_duree = QLabel(u"Dur√©e :")
  127.         label_sequence = QLabel(u"S√©quence n¬į :")
  128.         label_progression = QLabel(u"Titre progression :")
  129.         label_incitation = QLabel(u"Incitation :")
  130.         label_demande = QLabel(u"Demande :")
  131.         label_notions_abordees = QLabel(u"Notions abord√©es :")
  132.         label_consignes = QLabel(u"Consignes :")
  133.         label_contraintes = QLabel(u"Contraintes :")
  134.         # ==========================================
  135.         # Widgets Stacked 1
  136.         # ==========================================
  137.         # Cases √† cocher pour la s√©lection du niveau de classe
  138.         self.caseClasse6 = QRadioButton(u"6√®me")
  139.         self.caseClasse5 = QRadioButton(u"5√®me")
  140.         self.caseClasse4 = QRadioButton(u"4√®me")
  141.         self.caseClasse3 = QRadioButton(u"3√®me")
  142.         # Drapeau (aucune classe n'est coch√©e
  143.         # donc self.classe est √† 0)
  144.         self.classe = 0
  145.         # Les lignes de saisie
  146.         self.ligne_duree = QLineEdit()
  147.         self.ligne_sequence = QLineEdit()
  148.         self.ligne_progression = QLineEdit()
  149.         self.ligne_incitation = QLineEdit()
  150.         # Les QTextEdit de saisie
  151.         self.texte_demande = QTextEdit()
  152.         self.texte_demande.setMaximumHeight(100)
  153.         self.texte_demande.setMinimumHeight(100)
  154.         self.texte_notions_abordees = QTextEdit()
  155.         self.texte_notions_abordees.setMaximumHeight(42)
  156.         self.texte_notions_abordees.setMinimumHeight(42)
  157.         self.texte_consignes = QTextEdit()
  158.         self.texte_consignes.setMaximumHeight(70)
  159.         self.texte_consignes.setMinimumHeight(70)
  160.         self.texte_contraintes = QTextEdit()
  161.         self.texte_contraintes.setMaximumHeight(70)
  162.         self.texte_contraintes.setMinimumHeight(70)
  163.  
  164.         # Disposition dans la grille (stacked 1)
  165.         grid_1.addWidget(label_classe, 0, 0)
  166.         grid_1.addWidget(self.caseClasse6, 0, 1)
  167.         grid_1.addWidget(self.caseClasse5, 0, 2)
  168.         grid_1.addWidget(self.caseClasse4, 0, 3)
  169.         grid_1.addWidget(self.caseClasse3, 0, 4)
  170.  
  171.         grid_2.addWidget(label_duree, 1, 0)
  172.         grid_2.addWidget(self.ligne_duree, 1, 1, 1, 4)
  173.         grid_2.addWidget(label_sequence, 2, 0)
  174.         grid_2.addWidget(self.ligne_sequence, 2, 1, 1, 4)
  175.         grid_2.addWidget(label_progression, 3, 0)
  176.         grid_2.addWidget(self.ligne_progression, 3, 1, 1, 4)
  177.         grid_2.addWidget(label_incitation, 4, 0)
  178.         grid_2.addWidget(self.ligne_incitation, 4, 1, 1, 4)
  179.         grid_2.addWidget(label_demande, 5, 0)
  180.         grid_2.addWidget(self.texte_demande, 5, 1, 1, 4)
  181.         grid_2.addWidget(label_notions_abordees, 6, 0)
  182.         grid_2.addWidget(self.texte_notions_abordees, 6, 1, 1, 4)
  183.         grid_2.addWidget(label_consignes, 7, 0)
  184.         grid_2.addWidget(self.texte_consignes, 7, 1, 1, 4)
  185.         grid_2.addWidget(label_contraintes, 8, 0)
  186.         grid_2.addWidget(self.texte_contraintes, 8, 1, 1, 4)
  187.  
  188.         # ============================================= #
  189.         groupe_1.setLayout(grid_1)
  190.         groupe_2.setLayout(grid_2)
  191.  
  192.         layout = QGridLayout()
  193.         layout.setSpacing(4)
  194.         layout.addWidget(groupe_1, 0, 0)
  195.         layout.addWidget(groupe_2, 1, 0)
  196.         # ============================================= #
  197.  
  198.         #
  199.         #self.w_menu_stack_1.setLayout(grid)
  200.  
  201.         # Le QStackedWidget englobe et fait appara√ģtre la grille
  202.         # ici la grille layout (qui elle-m√™me englobe le QGroupBox)
  203.         self.w_menu_stack_1.setLayout(layout)
  204.  
  205.         # Initialisation des listes de r√©cup des donn√©es
  206.         self.liste_donnees = []
  207.  
  208.         # ==========================================
  209.         # Signaux
  210.         # ==========================================
  211.         # Les cases √† cocher QRadioButton (utilisation de lambda
  212.         # car il y a un argument dans la fonction appel√©e)
  213.         self.caseClasse6.toggled.connect(lambda:self.caseEtCombo(self.caseClasse6))
  214.         self.caseClasse5.toggled.connect(lambda:self.caseEtCombo(self.caseClasse5))
  215.         self.caseClasse4.toggled.connect(lambda:self.caseEtCombo(self.caseClasse4))
  216.         self.caseClasse3.toggled.connect(lambda:self.caseEtCombo(self.caseClasse3))
  217.         #
  218.         self.ligne_duree.textChanged.connect(self.changements_phase_1)
  219.         self.ligne_sequence.textChanged.connect(self.changements_phase_1)
  220.         self.ligne_progression.textChanged.connect(self.changements_phase_1)
  221.         self.ligne_incitation.textChanged.connect(self.changements_phase_1)
  222.         #
  223.         self.texte_demande.textChanged.connect(self.changements_phase_1)
  224.         self.texte_notions_abordees.textChanged.connect(self.changements_phase_1)
  225.         self.texte_consignes.textChanged.connect(self.changements_phase_1)
  226.         self.texte_contraintes.textChanged.connect(self.changements_phase_1)
  227.  
  228.     def stack_phase_2(self):
  229.         '''
  230.         '''
  231.         # Widgets group√©s
  232.         groupe_1 = QGroupBox()
  233.         groupe_2 = QGroupBox()
  234.         groupe_3 = QGroupBox()
  235.  
  236.         grid_1 = QGridLayout()
  237.         grid_1.setSpacing(0)
  238.  
  239.         grid_2 = QGridLayout()
  240.         grid_2.setSpacing(10)
  241.  
  242.         grid_3 = QGridLayout()
  243.         grid_3.setSpacing(10)
  244.  
  245.         # ==========================================
  246.         # Labels Stacked 2
  247.         # ==========================================
  248.         label_questionnement = QLabel(u"Questionnement :")
  249.         label_que_vont_app_eleves = QLabel(u"Que vont apprendre\nles √©l√®ves :")
  250.         label_question_denseignement = QLabel(u"Question\nd'enseignement :")
  251.         label_entree_princ_prog = QLabel(u"Entr√©e principale\ndu programme :")
  252.         label_champ_pratiq_plast = QLabel(u"Champ des pratiques\nplastiques :")
  253.         # ==========================================
  254.         # Widgets Stacked 2
  255.         # ==========================================
  256.         self.texte_questionnement = QTextEdit()
  257.         self.texte_questionnement.setMaximumHeight(90)
  258.         self.texte_questionnement.setMinimumHeight(90)
  259.         self.texte_que_vont_app_eleves = QTextEdit()
  260.         self.texte_que_vont_app_eleves.setMaximumHeight(90)
  261.         self.texte_que_vont_app_eleves.setMinimumHeight(90)
  262.         self.texte_question_denseignement = QTextEdit()
  263.         self.texte_question_denseignement.setMaximumHeight(90)
  264.         self.texte_question_denseignement.setMinimumHeight(90)
  265.         # Cases √† cocher pour la s√©lection de
  266.         # l'entr√©e principale du programme
  267.         self.caseEntr_1_Prog = QRadioButton(u"Cours d'Arts\nPlastiques")
  268.         self.caseEntr_1_Prog.setChecked(True)
  269.         # Drapeau la valeur par d√©faut est Cours ArtsP quand
  270.         # l'utilisateur n'a pas s√©lectionn√© de qradiobutton
  271.         self.entree_principale_prog = u"Cours d'Arts Plastiques"
  272.         print u"Entr√©e principale du programme :", self.entree_principale_prog
  273.         # Cases √† cocher pour l'entr√©e principale du programme
  274.         self.caseEntr_2_Prog = QRadioButton(u"Hda")
  275.         self.caseEntr_3_Prog = QRadioButton(u"EPI")
  276.         self.caseEntr_4_Prog = QRadioButton(u"PEAC")
  277.         # Cases √† cocher pour la s√©lection du champ des pratiques plastiques
  278.         self.case_prat_plast_1 = QCheckBox(u"Pratiques\nbidimensionnelles")
  279.         self.case_prat_plast_2 = QCheckBox(u"Pratiques\ntridimensionnelles")
  280.         self.case_prat_plast_3 = QCheckBox(u"Pratiques artistiques\nde l'image fixe et\nanim√©e")
  281.         self.case_prat_plast_4 = QCheckBox(u"Pratiques de la cr√©ation\nartistique num√©rique")
  282.  
  283.         # Disposition dans la grille (stacked 2)
  284.         grid_1.addWidget(label_questionnement, 0, 0)
  285.         grid_1.addWidget(self.texte_questionnement, 0, 1, 1, 4)
  286.         grid_1.addWidget(label_que_vont_app_eleves, 1, 0)
  287.         grid_1.addWidget(self.texte_que_vont_app_eleves, 1, 1, 1, 4)
  288.         grid_1.addWidget(label_question_denseignement, 2, 0)
  289.         grid_1.addWidget(self.texte_question_denseignement, 2, 1, 1, 4)
  290.  
  291.         grid_2.addWidget(label_entree_princ_prog, 3, 0)
  292.         grid_2.addWidget(self.caseEntr_1_Prog, 3, 1)
  293.         grid_2.addWidget(self.caseEntr_2_Prog, 3, 2)
  294.         grid_2.addWidget(self.caseEntr_3_Prog, 3, 3)
  295.         grid_2.addWidget(self.caseEntr_4_Prog, 3, 4)
  296.  
  297.         grid_3.addWidget(label_champ_pratiq_plast, 4, 0)
  298.         grid_3.addWidget(self.case_prat_plast_1, 4, 1)
  299.         grid_3.addWidget(self.case_prat_plast_2, 4, 2)
  300.         grid_3.addWidget(self.case_prat_plast_3, 4, 3)
  301.         grid_3.addWidget(self.case_prat_plast_4, 4, 4)
  302.         # ============================================= #
  303.         groupe_1.setLayout(grid_1)
  304.         groupe_2.setLayout(grid_2)
  305.         groupe_3.setLayout(grid_3)
  306.  
  307.         layout = QGridLayout()
  308.         layout.setSpacing(4)
  309.         layout.addWidget(groupe_1, 0, 0)
  310.         layout.addWidget(groupe_2, 1, 0)
  311.         layout.addWidget(groupe_3, 2, 0)
  312.         # ============================================= #
  313.  
  314.         # Le QStackedWidget englobe et fait appara√ģtre la grille
  315.         # ici la grille layout (qui elle-m√™me englobe le QGroupBox)
  316.         self.w_menu_stack_2.setLayout(layout)
  317.  
  318.         #
  319.         self.liste_champ_prat_plast = [0, 0, 0, 0]
  320.  
  321.         # ==========================================
  322.         # Signaux
  323.         # ==========================================
  324.         # Les cases √† cocher QRadioButton (utilisation de lambda
  325.         # car il y a un argument dans la fonction appel√©e)
  326.         self.caseEntr_1_Prog.toggled.connect(lambda:self.entreePrincipaleProg(self.caseEntr_1_Prog))
  327.         self.caseEntr_2_Prog.toggled.connect(lambda:self.entreePrincipaleProg(self.caseEntr_2_Prog))
  328.         self.caseEntr_3_Prog.toggled.connect(lambda:self.entreePrincipaleProg(self.caseEntr_3_Prog))
  329.         self.caseEntr_4_Prog.toggled.connect(lambda:self.entreePrincipaleProg(self.caseEntr_4_Prog))
  330.         #
  331.         self.texte_questionnement.textChanged.connect(self.changements_phase_2)
  332.         self.texte_que_vont_app_eleves.textChanged.connect(self.changements_phase_2)
  333.         self.texte_question_denseignement.textChanged.connect(self.changements_phase_2)
  334.         #
  335.         # Les cases √† cocher QCheckBox (utilisation de lambda
  336.         # car il y a un argument dans la fonction appel√©e)
  337.         # 1 Fonction pour chaque QCheckBox
  338.         self.case_prat_plast_1.toggled.connect(lambda:self.casePratPlast_1(self.case_prat_plast_1))
  339.         self.case_prat_plast_2.toggled.connect(lambda:self.casePratPlast_2(self.case_prat_plast_2))
  340.         self.case_prat_plast_3.toggled.connect(lambda:self.casePratPlast_3(self.case_prat_plast_3))
  341.         self.case_prat_plast_4.toggled.connect(lambda:self.casePratPlast_4(self.case_prat_plast_4))
  342.  
  343.     def stack_phase_3(self) :
  344.         '''
  345.         '''
  346.         # Widgets group√©s
  347.         groupe_1 = QGroupBox()
  348.         groupe_2 = QGroupBox()
  349.         groupe_3 = QGroupBox()
  350.  
  351.         self.grille_1_stack_3 = QGridLayout()
  352.         self.grille_1_stack_3.setSpacing(0)
  353.         self.grille_2_stack_3 = QGridLayout()
  354.         self.grille_2_stack_3.setSpacing(60)
  355.         self.grille_3_stack_3 = QGridLayout()
  356.         self.grille_3_stack_3.setSpacing(0)
  357.  
  358.         # ==========================================
  359.         # Labels Stacked 3
  360.         # ==========================================
  361.         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>")
  362.         label_mot_vocabulaire = QLabel(u"Mots de vocabulaire")
  363.         label_definitions = QLabel(u"D√©finitions")
  364.         # ==========================================
  365.         # Widgets Stacked 3
  366.         # ==========================================
  367.         # Bouton pour ajouter une ligne pour les mots de vocabulaire
  368.         self.bouton_ajout_ligne_vocabulaire = QPushButton(u"Ajouter une ligne de vocabulaire")
  369.         # Bouton pour supprimer une ligne pour les mots de vocabulaire
  370.         self.bouton_supprime_ligne_vocabulaire = QPushButton(u"Supprimer une ligne de vocabulaire")
  371.  
  372.         # Disposition dans la grille (stacked 3)
  373.         self.grille_1_stack_3.addWidget(self.bouton_ajout_ligne_vocabulaire, 0, 0)
  374.         self.grille_1_stack_3.addWidget(self.bouton_supprime_ligne_vocabulaire, 0, 1)
  375.  
  376.         self.grille_2_stack_3.addWidget(label_mot_vocabulaire, 0, 0, 1, 1)
  377.         self.grille_2_stack_3.addWidget(label_definitions, 0, 1, 1, 1)
  378.  
  379.         #self.grille_3_stack_3.addWidget(self.label_annonce_vocab, 0, 0)
  380.         # ============================================= #
  381.         groupe_1.setLayout(self.grille_1_stack_3)
  382.         groupe_2.setLayout(self.grille_2_stack_3)
  383.         groupe_3.setLayout(self.grille_3_stack_3)
  384.  
  385.         layout = QGridLayout()
  386.         layout.setSpacing(0)
  387.         layout.addWidget(groupe_1, 0, 0)
  388.         layout.addWidget(groupe_2, 1, 0)
  389.         layout.addWidget(groupe_3, 2, 0)
  390.         # ============================================= #
  391.  
  392.         # Le QStackedWidget englobe et fait appara√ģtre la grille
  393.         # ici la grille layout (qui elle-m√™me englobe le QGroupBox)
  394.         self.w_menu_stack_3.setLayout(layout)
  395.  
  396.         # ==========================================
  397.         # Signaux
  398.         # ==========================================
  399.         # Les boutons ajoutent des lignes de vocabulaire et peuvent aussi les enlever
  400.         self.bouton_ajout_ligne_vocabulaire.clicked.connect(self.ajouter_un_mot_vocab)
  401.         self.bouton_supprime_ligne_vocabulaire.clicked.connect(self.supprimer_un_mot_vocab)
  402.        
  403.     def stack_phase_4(self) :
  404.         '''
  405.         '''
  406.         # Widgets group√©s
  407.         groupe_1 = QGroupBox()
  408.         groupe_2 = QGroupBox()
  409.         groupe_3 = QGroupBox()
  410.  
  411.         self.grille_1_stack_4 = QGridLayout()
  412.         self.grille_1_stack_4.setSpacing(0)
  413.         self.grille_2_stack_4 = QGridLayout()
  414.         self.grille_2_stack_4.setSpacing(0)
  415.         self.grille_3_stack_4 = QGridLayout()
  416.         self.grille_3_stack_4.setSpacing(0)
  417.  
  418.         # ==========================================
  419.         # Labels Stacked 4
  420.         # ==========================================
  421.         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>")
  422.         label_questions = QLabel(u"Questions pos√©es aux √©l√®ves")
  423.         #label_definitions = QLabel(u"D√©finitions")
  424.         # ==========================================
  425.         # Widgets Stacked 4
  426.         # ==========================================
  427.         # Bouton pour ajouter une ligne de question pos√©e aux √©l√®ves
  428.         self.bouton_ajout_ligne_question = QPushButton(u"Ajouter une ligne de question pos√©e aux √©l√®ves")
  429.         # Bouton pour supprimer une ligne de question pos√©e aux √©l√®ves
  430.         self.bouton_supprime_ligne_question = QPushButton(u"Supprimer une ligne de question pos√©e aux √©l√®ves")
  431.  
  432.         # Disposition dans la grille (stacked 4)
  433.         self.grille_1_stack_4.addWidget(self.bouton_ajout_ligne_question, 0, 0)
  434.         self.grille_1_stack_4.addWidget(self.bouton_supprime_ligne_question, 0, 1)
  435.  
  436.         self.grille_2_stack_4.addWidget(label_questions, 0, 0, 1, 1)
  437.  
  438.         #self.grille_3_stack_3.addWidget(label_annonce_questions, 0, 0)
  439.         # ============================================= #
  440.         groupe_1.setLayout(self.grille_1_stack_4)
  441.         groupe_2.setLayout(self.grille_2_stack_4)
  442.         groupe_3.setLayout(self.grille_3_stack_4)
  443.  
  444.         layout = QGridLayout()
  445.         layout.setSpacing(0)
  446.         layout.addWidget(groupe_1, 0, 0)
  447.         layout.addWidget(groupe_2, 1, 0)
  448.         layout.addWidget(groupe_3, 2, 0)
  449.         # ============================================= #
  450.  
  451.         # Le QStackedWidget englobe et fait appara√ģtre la grille
  452.         # ici la grille layout (qui elle-m√™me englobe le QGroupBox)
  453.         self.w_menu_stack_4.setLayout(layout)
  454.  
  455.         # ==========================================
  456.         # Signaux
  457.         # ==========================================
  458.         # Les boutons ajoutent des lignes de questions et peuvent aussi les enlever
  459.         self.bouton_ajout_ligne_question.clicked.connect(self.ajouter_une_question)
  460.         self.bouton_supprime_ligne_question.clicked.connect(self.supprimer_la_question)
  461.        
  462.     def stack_phase_5(self) :
  463.         '''
  464.         '''
  465.         # Widgets group√©s
  466.         groupe_1 = QGroupBox()
  467.         groupe_2 = QGroupBox()
  468.         groupe_3 = QGroupBox()
  469.  
  470.         self.grille_1_stack_5 = QGridLayout()
  471.         self.grille_1_stack_5.setSpacing(0)
  472.         self.grille_2_stack_5 = QGridLayout()
  473.         self.grille_2_stack_5.setSpacing(174)
  474.         self.grille_3_stack_5 = QGridLayout()
  475.         self.grille_3_stack_5.setSpacing(0)
  476.  
  477.         # ==========================================
  478.         # Labels Stacked 5
  479.         # ==========================================
  480.         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>")
  481.         label_chem_img_ref_art = QLabel(u"Chemin de l'image")
  482.         label_com_ref_art = QLabel(u"Commentaire sur l'oeuvre")
  483.         label_com_ref_art.setGeometry(QRect(500, 500, 500, 100))
  484.         #label_com_ref_art.resize(1000, 30)
  485.         label_charg_img_ref_art = QLabel(u"Charger image")
  486.         # ==========================================
  487.         # Widgets Stacked 5
  488.         # ==========================================
  489.         # Bouton pour ajouter une ligne pour les r√©f√©rences artistiques
  490.         self.bouton_ajout_ligne_ref_art = QPushButton(u"Ajouter une r√©f√©rence artistique")
  491.         # Bouton pour supprimer une ligne pour les r√©f√©rences artistiques
  492.         self.bouton_supprime_ligne_ref_art = QPushButton(u"Supprimer une r√©f√©rence artistique")
  493.         '''
  494.         # La 1√®re ligne de QTextEdit
  495.         self.texte_chem_img_ref_art = QTextEdit()
  496.         self.texte_chem_img_ref_art.setMaximumHeight(40)
  497.         self.texte_chem_img_ref_art.setMinimumHeight(40)
  498.         self.texte_chem_img_ref_art.setMaximumWidth(180)
  499.         self.texte_chem_img_ref_art.setMinimumWidth(180)
  500.         self.texte_com_ref_art = QTextEdit()
  501.         self.texte_com_ref_art.setMaximumHeight(54)
  502.         self.texte_com_ref_art.setMinimumHeight(54)
  503.         self.bouton_charg_img_ref_art = QPushButton()
  504.         '''
  505.  
  506.         # Disposition dans la grille (stacked 5)
  507.         self.grille_1_stack_5.addWidget(self.bouton_ajout_ligne_ref_art, 0, 0)
  508.         self.grille_1_stack_5.addWidget(self.bouton_supprime_ligne_ref_art, 0, 1)
  509.  
  510.         self.grille_2_stack_5.addWidget(label_chem_img_ref_art, 0, 0, 1, 1)
  511.         self.grille_2_stack_5.addWidget(label_com_ref_art, 0, 1, 1, 1)
  512.         self.grille_2_stack_5.addWidget(label_charg_img_ref_art, 0, 2, 1, 1)
  513.  
  514.         #self.grille_3_stack_5.addWidget(self.label_annonce_ref_art, 0, 0)
  515.         # ============================================= #
  516.         groupe_1.setLayout(self.grille_1_stack_5)
  517.         groupe_2.setLayout(self.grille_2_stack_5)
  518.         groupe_3.setLayout(self.grille_3_stack_5)
  519.  
  520.         layout = QGridLayout()
  521.         layout.setSpacing(0)
  522.         layout.addWidget(groupe_1, 0, 0)
  523.         layout.addWidget(groupe_2, 1, 0)
  524.         layout.addWidget(groupe_3, 2, 0)
  525.         # ============================================= #
  526.  
  527.         # Le QStackedWidget englobe et fait appara√ģtre la grille
  528.         # ici la grille layout (qui elle-m√™me englobe le QGroupBox)
  529.         self.w_menu_stack_5.setLayout(layout)
  530.  
  531.         # ==========================================
  532.         # Signaux
  533.         # ==========================================
  534.         # Les boutons ajoutent des lignes pour les r√©f√©rences artistiques et peuvent aussi les enlever
  535.         self.bouton_ajout_ligne_ref_art.clicked.connect(self.ajouter_ref_artistique)
  536.         self.bouton_supprime_ligne_ref_art.clicked.connect(self.supprimer_ref_artistique)
  537.  
  538.     def caseEtCombo(self, c):
  539.         ''' Fonction de r√©cup√©ration des valeurs des
  540.         cases √† cocher pour le niveau de classe '''
  541.         # S√©lection des classes et on montre ou on cache
  542.         # les combos (et items contenus) des comp√©tences
  543.         # travaill√©es
  544.         if c.isChecked() == True :
  545.             self.classe = unicode(c.text()[0])
  546.         else : self.classe = 0
  547.         if self.classe == u"6" :
  548.             print "Niveau de classe :", self.classe
  549.         elif self.classe in [u'5', u'4', u'3']:
  550.             # Drapeau (quand l'utilisateur n'a
  551.             # pas s√©lectionn√© de qradiobutton)
  552.             print "Niveau de classe :", self.classe
  553.  
  554.     def changements_phase_1(self) :
  555.         '''
  556.         '''
  557.         # R√©cup des donn√©es
  558.         try : self.duree = unicode(self.ligne_duree.text())
  559.         except : self.duree = u''
  560.         try : self.sequence = unicode(self.ligne_sequence.text())
  561.         except : self.sequence = u''
  562.         try : self.progression = unicode(self.ligne_progression.text())
  563.         except : self.progression = u''
  564.         try : self.incitation = unicode(self.ligne_incitation.text())
  565.         except : self.incitation = u''
  566.         try : self.demande = unicode(self.texte_demande.toPlainText())
  567.         except : self.demande = u''
  568.         try : self.notions = unicode(self.texte_notions_abordees.toPlainText())
  569.         except : self.notions = u''
  570.         try : self.consignes = unicode(self.texte_consignes.toPlainText())
  571.         except : self.consignes = u''
  572.         try : self.contraintes = unicode(self.texte_contraintes.toPlainText())
  573.         except : self.contraintes = u''
  574.  
  575.         # Si le niveau de classe (self.classe √† 0) n'est pas s√©lectionn√©, une bo√ģte de dialogue nous en informe
  576.         if self.classe == 0 :
  577.             message = QMessageBox.warning(self, u'Message', u"Vous devez s√©lectionner un niveau de classe avant de continuer !!!", QMessageBox.Ok)
  578.  
  579.         #
  580.         try :
  581.             self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, self.notions, self.consignes, self.contraintes])
  582.             #
  583.             self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
  584.         except : pass
  585.  
  586.         #
  587.         print "self.liste_donnees_finales", self.liste_donnees_finales
  588.  
  589.     def entreePrincipaleProg(self, c):
  590.         ''' Fonction de r√©cup√©ration des valeurs des
  591.         cases √† cocher pour l'entr√©e principale du programme '''
  592.         if c.isChecked() == True :
  593.             self.entree_principale_prog = unicode(c.text())
  594.         if self.entree_principale_prog == u"Cours d'Arts\nPlastiques" :
  595.             print u"Entr√©e principale du programme :", self.entree_principale_prog
  596.         elif self.entree_principale_prog in [u"Hda", u"EPI", u"PEAC"]:
  597.             # Drapeau (quand l'utilisateur n'a
  598.             # pas s√©lectionn√© de qradiobutton)
  599.             print u"Entr√©e principale du programme :", self.entree_principale_prog
  600.  
  601.         #
  602.         try :
  603.             self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
  604.             self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
  605.             self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
  606.             #
  607.             self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
  608.         except : pass
  609.  
  610.         #
  611.         print "self.liste_donnees_finales", self.liste_donnees_finales
  612.  
  613.     def changements_phase_2(self) :
  614.         '''
  615.         '''
  616.         # R√©cup des donn√©es
  617.         try : self.questionnement = unicode(self.texte_questionnement.toPlainText())
  618.         except : self.questionnement =  u''
  619.         try : self.que_vont_app_eleves = unicode(self.texte_que_vont_app_eleves.toPlainText())
  620.         except : self.que_vont_app_eleves = u''
  621.         try : self.question_denseignement = unicode(self.texte_question_denseignement.toPlainText())
  622.         except : self.question_denseignement =  u''
  623.  
  624.         # Si le niveau de classe (self.classe √† 0) n'est pas s√©lectionn√©, une bo√ģte de dialogue nous en informe
  625.         if self.classe == 0 :
  626.             message = QMessageBox.warning(self, u'Message', u"Vous devez s√©lectionner un niveau de classe avant de continuer !!!", QMessageBox.Ok)
  627.  
  628.         #
  629.         try :
  630.             self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
  631.             self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
  632.             self.que_vont_app_eleves, self.question_denseignement])
  633.             #
  634.             self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
  635.         except : pass
  636.  
  637.         #
  638.         print "self.liste_donnees_finales", self.liste_donnees_finales
  639.  
  640.     # ==============================================================================
  641.     ''' Fonctions de r√©cup√©ration des valeurs. Cases
  642.     √† cocher pour le champ des pratiques plastiques '''
  643.  
  644.     def casePratPlast_1(self, c):
  645.         if c.isChecked() == True :
  646.             self.prat_plast = unicode(c.text())
  647.             if self.prat_plast == u"Pratiques\nbidimensionnelles" :
  648.                 self.prat_plast = u"[x] Pratiques bidimensionnelles"
  649.                 #
  650.                 self.liste_champ_prat_plast[0] = self.prat_plast
  651.         #
  652.         try :
  653.             self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
  654.             self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
  655.             self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
  656.             #
  657.             self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
  658.         except : pass
  659.  
  660.         #
  661.         print "self.liste_donnees_finales", self.liste_donnees_finales
  662.  
  663.     def casePratPlast_2(self, c):
  664.         if c.isChecked() == True :
  665.             self.prat_plast = unicode(c.text())
  666.             if self.prat_plast == u"Pratiques\ntridimensionnelles" :
  667.                 self.prat_plast = u"[x] Pratiques tridimensionnelles"
  668.                 self.liste_champ_prat_plast[1] = self.prat_plast
  669.         #
  670.         try :
  671.             self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
  672.             self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
  673.             self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
  674.             #
  675.             self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
  676.         except : pass
  677.  
  678.         #
  679.         print "self.liste_donnees_finales", self.liste_donnees_finales
  680.  
  681.     def casePratPlast_3(self, c):
  682.         if c.isChecked() == True :
  683.             self.prat_plast = unicode(c.text())
  684.             if self.prat_plast == u"Pratiques artistiques\nde l'image fixe et\nanim√©e" :
  685.                 self.prat_plast = u"[x] Pratiques artistiques de l'image fixe et anim√©e"
  686.                 self.liste_champ_prat_plast[2] = self.prat_plast
  687.         #
  688.         try :
  689.             self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
  690.             self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
  691.             self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
  692.             #
  693.             self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
  694.         except : pass
  695.  
  696.         #
  697.         print "self.liste_donnees_finales", self.liste_donnees_finales
  698.  
  699.     def casePratPlast_4(self, c):
  700.         if c.isChecked() == True :
  701.             self.prat_plast = unicode(c.text())
  702.             if self.prat_plast == u"Pratiques de la cr√©ation\nartistique num√©rique" :
  703.                 self.prat_plast = u"[x] Pratiques de la cr√©ation artistique num√©rique"
  704.                 self.liste_champ_prat_plast[3] = self.prat_plast
  705.         #
  706.         try :
  707.             self.liste_donnees.append([self.classe, self.duree, self.sequence, self.progression, self.incitation, self.demande, \
  708.             self.notions, self.consignes, self.contraintes, self.entree_principale_prog, self.questionnement, \
  709.             self.que_vont_app_eleves, self.question_denseignement, self.liste_champ_prat_plast])
  710.             #
  711.             self.liste_donnees_finales = self.liste_donnees[len(self.liste_donnees)-1]
  712.         except : pass
  713.  
  714.         #
  715.         print "self.liste_donnees_finales", self.liste_donnees_finales
  716.     # ==============================================================================
  717.  
  718.     def ajouter_un_mot_vocab(self) :
  719.         """
  720.         Merci √† ekhumoro de m'avoir aid√© ici pour la cr√©ation des
  721.         lignes de widgets ; voir la discussion ici sur stackoverflow :
  722.         https://stackoverflow.com/questions/47380658/how-to-add-rows-of-widgets-after-deletion-in-a-qgridlayout
  723.         """
  724.         #
  725.         r = len(self.liste_mots_vocabulaire)
  726.         #if r >= 0 : self.label_annonce_vocab.hide()
  727.         # Cr√©ation des QTextEdit
  728.         self.dico_vocab_mot[r] = QTextEdit()
  729.         self.dico_vocab_def[r] = QTextEdit()
  730.         self.dico_vocab_mot[r].setMaximumWidth(180)
  731.         self.dico_vocab_mot[r].setMinimumWidth(180)
  732.         self.dico_vocab_mot[r].setMaximumHeight(54)
  733.         self.dico_vocab_mot[r].setMinimumHeight(54)
  734.         self.dico_vocab_def[r].setMaximumHeight(54)
  735.         self.dico_vocab_def[r].setMinimumHeight(54)
  736.         # Conditions de redimensionnement
  737.         if r > 5 :
  738.             self.dico_vocab_mot[r].setMaximumHeight(34)
  739.             self.dico_vocab_mot[r].setMinimumHeight(34)
  740.             self.dico_vocab_def[r].setMaximumHeight(34)
  741.             self.dico_vocab_def[r].setMinimumHeight(34)
  742.         # R√©partition dans la grille
  743.         self.grille_3_stack_3.addWidget(self.dico_vocab_mot[r], r, 0)
  744.         self.grille_3_stack_3.addWidget(self.dico_vocab_def[r], r, 1)
  745.         # Ecriture des n¬įs de lignes dans la partie mots de vocabulaire
  746.         self.dico_vocab_mot[r].setText(str(r+1)+'. ')
  747.         # Les donn√©es sont introduites dans une liste
  748.         self.liste_mots_vocabulaire.append([self.dico_vocab_mot[r], self.dico_vocab_def[r]])
  749.         # =====================================================
  750.         # Signaux
  751.         self.dico_vocab_mot[r].textChanged.connect(self.changements_phase_3)
  752.         self.dico_vocab_def[r].textChanged.connect(self.changements_phase_3)
  753.         # =====================================================
  754.  
  755.     def supprimer_un_mot_vocab(self) :
  756.         """
  757.         Merci √† ekhumoro de m'avoir aid√© ici pour la suppression des
  758.         lignes de widgets ; voir la discussion ici sur stackoverflow :
  759.         https://stackoverflow.com/questions/47380658/how-to-add-rows-of-widgets-after-deletion-in-a-qgridlayout
  760.         """
  761.         # On rep√®re l'indice
  762.         row = len(self.liste_mots_vocabulaire) - 1
  763.         # Si l'indice de la ligne st sup√©rieur ou egal √† 0
  764.         if row >= 0:
  765.             for column in range(self.grille_3_stack_3.columnCount()):
  766.                 # On rep√®re √† quelle position se trouve l'item
  767.                 item = self.grille_3_stack_3.itemAtPosition(row, column)
  768.                 if item is not None:
  769.                     # On supprime l'item (le widget
  770.                     # correspondant est supprim√©)
  771.                     item.widget().deleteLater()
  772.             # On vide (√† chaque passage) l'indice
  773.             # correspondant dans la liste
  774.             del self.liste_mots_vocabulaire[row]
  775.             # On vide aussi √† l'indice
  776.             # correspondant chaque dictionnaire
  777.             del self.dico_vocab_mot[row]
  778.             del self.dico_vocab_def[row]
  779.            
  780.     def ajouter_une_question(self) :
  781.         '''
  782.         '''
  783.         #
  784.         r = len(self.liste_questions_pos_elev)
  785.         #if r >= 0 : self.label_annonce_question.hide()
  786.         self.dico_question_pos_elev[r] = QTextEdit()
  787.         #self.dico_vocab_def[r] = QTextEdit()
  788.         self.dico_question_pos_elev[r].setMaximumHeight(54)
  789.         self.dico_question_pos_elev[r].setMinimumHeight(54)
  790.         if r > 5 :
  791.             self.dico_question_pos_elev[r].setMaximumHeight(34)
  792.             self.dico_question_pos_elev[r].setMinimumHeight(34)
  793.         self.grille_3_stack_4.addWidget(self.dico_question_pos_elev[r], r, 0)
  794.         self.dico_question_pos_elev[r].setText(str(r+1)+'. ')
  795.         self.liste_questions_pos_elev.append(self.dico_question_pos_elev[r])
  796.         # =====================================================
  797.         # Signal
  798.         self.dico_question_pos_elev[r].textChanged.connect(self.changements_phase_4)
  799.         # =====================================================
  800.    
  801.     def supprimer_la_question(self) :
  802.         '''
  803.         '''
  804.         row = len(self.liste_questions_pos_elev) - 1
  805.         if row >= 0:
  806.             for column in range(self.grille_3_stack_4.columnCount()):
  807.                 item = self.grille_3_stack_4.itemAtPosition(row, column)
  808.                 if item is not None:
  809.                     item.widget().deleteLater()
  810.             del self.liste_questions_pos_elev[row]
  811.             del self.dico_question_pos_elev[row]
  812.             #del self.dico_vocab_def[row]
  813.            
  814.     def ajouter_ref_artistique(self) :
  815.         '''
  816.         '''
  817.         #
  818.         r = len(self.liste_ref_artistiques)
  819.         #if r >= 0 : self.label_annonce_vocab.hide()
  820.         # Cr√©ation des QTextEdit
  821.         self.dico_chem_ref_art[r] = QTextEdit()
  822.         self.dico_com_ref_art[r] = QTextEdit()
  823.         self.dico_chem_ref_art[r].setMaximumWidth(170)
  824.         self.dico_chem_ref_art[r].setMinimumWidth(170)
  825.         self.dico_chem_ref_art[r].setMaximumHeight(84)
  826.         self.dico_chem_ref_art[r].setMinimumHeight(84)
  827.         self.dico_com_ref_art[r].setMaximumWidth(398)
  828.         self.dico_com_ref_art[r].setMinimumWidth(398)
  829.         self.dico_com_ref_art[r].setMaximumHeight(84)
  830.         self.dico_com_ref_art[r].setMinimumHeight(84)
  831.         # Cr√©ation des boutons de chargement
  832.         self.dico_bout_charg_ref_art[r] = QPushButton(u"Ouvrir ref {}".format(r+1))
  833.         '''
  834.         # Conditions de redimensionnement
  835.         if r > 5 :
  836.             self.dico_vocab_mot[r].setMaximumHeight(34)
  837.             self.dico_vocab_mot[r].setMinimumHeight(34)
  838.             self.dico_vocab_def[r].setMaximumHeight(34)
  839.             self.dico_vocab_def[r].setMinimumHeight(34)
  840.         '''
  841.         # R√©partition dans la grille
  842.         self.grille_3_stack_5.addWidget(self.dico_chem_ref_art[r], r, 0)
  843.         self.grille_3_stack_5.addWidget(self.dico_com_ref_art[r], r, 1)
  844.         self.grille_3_stack_5.addWidget(self.dico_bout_charg_ref_art[r], r, 2)
  845.         # Ecriture des n¬įs de lignes dans la partie mots de vocabulaire
  846.         self.dico_chem_ref_art[r].setText(str(r+1)+'. ')
  847.         # Les donn√©es sont introduites dans une liste
  848.         self.liste_ref_artistiques.append([self.dico_chem_ref_art[r], self.dico_com_ref_art[r], self.dico_bout_charg_ref_art[r]])
  849.         # =====================================================
  850.         # Signaux
  851.         # ---------- R√©cup des donn√©es textuelles
  852.         self.dico_chem_ref_art[r].textChanged.connect(self.changements_phase_5)
  853.         self.dico_com_ref_art[r].textChanged.connect(self.changements_phase_5)
  854.         # ---------- R√©cup du libell√© du bouton s√©lectionn√© par l'utilisateur
  855.         self.dico_bout_charg_ref_art[r].released.connect(self.libelle_bouton_ref_art)
  856.         # =====================================================
  857.    
  858.     def supprimer_ref_artistique(self) :
  859.         '''
  860.         '''
  861.         row = len(self.liste_ref_artistiques) - 1
  862.         if row >= 0:
  863.             for column in range(self.grille_3_stack_5.columnCount()):
  864.                 item = self.grille_3_stack_5.itemAtPosition(row, column)
  865.                 if item is not None:
  866.                     item.widget().deleteLater()
  867.             del self.liste_ref_artistiques[row]
  868.             del self.dico_chem_ref_art[row]
  869.             del self.dico_com_ref_art[row]
  870.             del self.dico_bout_charg_ref_art[row]
  871.  
  872.     def changements_phase_3(self) :
  873.         """
  874.         """
  875.         #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'']
  876.         self.liste_mots_vocabulaire_finale = [[unicode(vocab[0].toPlainText()), unicode(vocab[1].toPlainText())] for vocab in self.liste_mots_vocabulaire]
  877.  
  878.         print
  879.         print "self.liste_mots_vocabulaire_finale :"
  880.         print
  881.         print self.liste_mots_vocabulaire_finale
  882.         print
  883.        
  884.     def changements_phase_4(self) :
  885.         """
  886.         """
  887.         self.liste_questions_pos_elev_finale = [unicode(quest.toPlainText()) for quest in self.liste_questions_pos_elev]
  888.  
  889.         print
  890.         print "self.liste_questions_pos_elev_finale :"
  891.         print
  892.         print self.liste_questions_pos_elev_finale
  893.         print
  894.        
  895.     def changements_phase_5(self) :
  896.         """
  897.         """
  898.         self.liste_ref_artistiques_finale = [[unicode(refart[0].toPlainText()), unicode(refart[1].toPlainText()), unicode(refart[2])] for refart in self.liste_ref_artistiques]
  899.  
  900.         print
  901.         print "self.liste_ref_artistiques_finale :"
  902.         print
  903.         print self.liste_ref_artistiques_finale
  904.         print
  905.        
  906.     def libelle_bouton_ref_art(self) :
  907.         '''
  908.         S√©lectionner l'id du bouton press√© en vue de
  909.         l'affichage du chemin de l'image s√©lectionn√©e
  910.         dans le QTextEdit d√©di√©
  911.         '''
  912.        
  913.         #
  914.         message_bouton_ref_art = self.sender()
  915.        
  916.         # Le texte du bouton (par ex pour le bouton n¬į2) est
  917.         # de la forme : Ouvrir ref 2
  918.         texte_bouton = message_bouton_ref_art.text()
  919.        
  920.         # On ne s√©lectionne que le texte comprenant le num√©ro
  921.         # du bouton
  922.         numero_bouton = texte_bouton.right(2) # Lecture √† partir de la droite
  923.  
  924.         # Si il y a un espace ds la s√©lection, c'est √† dire,
  925.         # par exemple, pour le 3√®me bouton on obtiendra " 3",
  926.         # ... si il y 10 boutons, on aura "10" (on se laisse
  927.         # la possibilit√© de pouvoir s√©lectionner de 1 √† 99
  928.         # boutons)
  929.         if numero_bouton[0:1] == " ": numero_bouton = numero_bouton[1:2]
  930.  
  931.         # Le num√©ro du bouton prend le type integer
  932.         numero_bouton = int(numero_bouton)
  933.        
  934.         # Attribution de l'indice du bouton
  935.         i = numero_bouton - 1
  936.  
  937.         # =====================================================
  938.         # Signal
  939.         # ---------- Affichage des images/vignettes et chemins images
  940.         self.dico_bout_charg_ref_art[i].clicked.connect(lambda: self.ouvrir_image_boite_ref_art(i))
  941.         # =====================================================
  942.        
  943.     def ouvrir_image_boite_ref_art(self, n) :
  944.         ''' Fonction pour la bo√ģte de dialogue d'ouverture
  945.         pour charger les diff√©rentes oeuvres (r√©f√©rences artistiques) '''
  946.        
  947.         # La bo√ģte
  948.         ouv_fichier = QFileDialog.getOpenFileName(self, 'Ouvrir une image', os.path.expanduser('~'), 'Images (*.jpg *.jpeg *.JPG *.JPEG *.png *.gif)')
  949.        
  950.         # R√©cup du chemin et nom de fichier
  951.         chemin_fichier_ref_art = unicode(ouv_fichier)
  952.        
  953.         # === Redimensionnnement de l'image pour affichage dans le QTextEdit ======
  954.         # Largeur de la future vignette
  955.         nouv_w_1 = 120
  956.         # Ouverture de l'image  
  957.         obImg_1 = Image.open(chemin_fichier_ref_art)
  958.         # Recup dimensions de l'image 1)
  959.         w_1, h_1 = obImg_1.size
  960.         # Calcul du ratio de l'image 1)
  961.         ratio_1 = float(w_1)/float(h_1)
  962.         # Calcul de future hauteur avec les dimensions donnees par l'utilisateur
  963.         calcHauteur_img_1 = int(float(nouv_w_1)/ratio_1)
  964.         # =========================================================================
  965.        
  966.         # Affichage de l'image dans le QTextEdit
  967.         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))
  968.        
  969.         # La liste finale des donn√©es est r√©actualis√©e avec les
  970.         # nouvelles donn√©es (le chemin et nom de l'image charg√©e)
  971.         del self.liste_ref_artistiques_finale[n][0]
  972.         self.liste_ref_artistiques_finale[n].insert(0, chemin_fichier_ref_art)
  973.        
  974.     def affiche_phases(self,i):
  975.         self.stack.setCurrentIndex(i)
  976.  
  977. if __name__ == '__main__':
  978.     app = QApplication(sys.argv)
  979.     matable = EssaiQStackedWidget_Seq_Prof()
  980.     matable.show()
  981.     app.exec_()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top