예제 #1
0
 def reDessiner(self):
     logD("ZoneDessin.reDessiner() !")
     # 1. On retire les widgets
     self.clear_widgets()
     # 2. On recalcule les dimensions et les cases
     self.calculerDimensions()
     self.calculerCases()
     # 3. On trie les cases par index puis on les ajoute à la ZoneDessin.
     list.sort(self.cases, key=lambda case: case.index)
     for case in self.cases:
         self.add_widget(case)
     print(len(self.elements))
     for element in sorted(self.elements,
                           key=lambda element: element.numero):
         print(element)
예제 #2
0
    def __init__(self):
        """ Le constructeur de la classe Ascenseurs est la fonction la plus
            importante. Elle :
            1. Initialise le logger (voir logger.py)
            2. lance la construction de Tkinter
            3. Customise la fenêtre de l'application
            4. Crée le panneau principal contenant tous les autres widgets
            et le positionne
            5. Charge les ressources externes (dessins)
        """
        logger.initialiser()
        logI('Construction de l\'application')

        super().__init__()

        self.geometry('800x600')

        self.panneau_principal = tk.Frame(self)
        self.panneau_principal.grid()

        ressources.chargerDessins()

        # Création du panneau de maintenance
        self.panneau_maintenance = PanneauMaintenance(
            parent=self.panneau_principal)

        # Création du panneau de puit
        self.panneau_puit = PanneauPuit(self.panneau_principal)

        # Création de la cabine
        self.cabine = Cabine(self.panneau_puit.dessin_puit)

        # Création du panneau interne de la Cabine
        self.panneau_cabine = PanneauCabine(self.panneau_principal,
                                            self.cabine)

        # Création des étages
        self.etages = Etages(self.panneau_puit.dessin_puit)

        # Création des capteurs
        self.capteurs = Capteurs(self.panneau_puit.dessin_puit, self.cabine,
                                 self.etages.etages)

        logD('Lancement de l\'animation')
        self.animation()
        self.mainloop()
예제 #3
0
def chargerDessins():
    try:
        global dessin_bouton_bas
        global dessin_bouton_bas_actif
        global dessin_bouton_double_bas
        global dessin_bouton_haut
        global dessin_bouton_haut_actif
        global dessin_bouton_double_haut
        global dessin_bouton_rond
        global images_chargees
        dessin_bouton_haut = tk.PhotoImage(file='haut.gif')
        dessin_bouton_haut_actif = tk.PhotoImage(file='haut_actif.gif')
        dessin_bouton_double_bas = tk.PhotoImage(file='double_bas.gif')
        dessin_bouton_bas = tk.PhotoImage(file='bas.gif')
        dessin_bouton_bas_actif = tk.PhotoImage(file='bas_actif.gif')
        dessin_bouton_double_haut = tk.PhotoImage(file='double_haut.gif')
        dessin_bouton_rond = tk.PhotoImage(file='rond.gif')
        images_chargees = True
        logD('Dessins chargés !')
    except tk.TclError as e:
        logE('''Les images GIF des boutons n'ont pas pu être chargées''')
        exit()
예제 #4
0
 def __init__(self,
              etapes=None,
              transition=None,
              X=0,
              Y=0,
              amont=True,
              numero=None):
     Element.__init__(self, X, Y, 3)
     self._etapes = []
     if isinstance(etapes, Etape):
         self._etapes.append(etapes)
     elif isinstance(etapes, list):
         for etape in etapes:
             assert isinstance(etape, Etape)
         self._etapes.extend(etapes)
     self._transition = transition
     if transition is not None and X != 0 and Y != 0:
         self.X = transition.X
         self.Y = transition.Y
     self._amont = amont
     self._numero = Liaison.auto_numerotation if numero is None else numero
     Liaison.auto_numerotation += 1
     logD(str(self))
예제 #5
0
    def chargerXML(self, fichier):
        """ Vide le dictionnaire elements et le remplit avec les données du
            fichier XML """
        logI("Chargement du fichier " + str(fichier) + "...")
        self._elements.clear()
        try:
            arbre = parse(source=fichier)
        except FileNotFoundError as e:
            raise GrafcetError("Fichier : " + str(fichier) + " introuvable !")
        except ParseError as e:
            raise GrafcetError(
                "Erreur lors du chargement du fichier XML : " + fichier +
                "\nMessage du module XML : " + ErrorString(e.code))
        # TODO : vérifier intégrité du fichier xml
        etapes = arbre.find('Etapes')
        transitions = arbre.find('Transitions')
        liaisons = arbre.find('Liaisons')

        for etape_xml in etapes.findall('Etape'):
            etape = Etape()
            etape.deXml(etape_xml)
            logD(etape)
            self._elements['E' + str(etape.numero)] = etape

        for transition_xml in transitions.findall('Transition'):
            transition = Transition()
            transition.deXml(transition_xml)
            logD(transition)
            self._elements['T' + str(transition.numero)] = transition

        for liaison_xml in liaisons.findall('Liaison'):
            liaison = Liaison()
            liaison.deXml(liaison_xml, self._elements.values())
            logD(liaison)
            self._elements['L' + str(liaison.numero)] = liaison

        logI(str(len(self._elements)) + " éléments trouvés !")
예제 #6
0
파일: gui.py 프로젝트: LandReagan/Grafcet
 def __init__(self, **kwargs):
     logD("Création de la zone de dessin !")
     Widget.__init__(self, **kwargs)
     self.cases = []
     self.reDessiner()
예제 #7
0
파일: gui.py 프로젝트: LandReagan/Grafcet
 def __init__(self, controleur, *args):
     BoxLayout.__init__(self, *args)
     logD("Lancement de la GUI !")
     self.controleur = controleur
     self.zone_controle.controleur = controleur
     self.on_elements()
예제 #8
0
파일: gui.py 프로젝트: LandReagan/Grafcet
 def lancerTests(self):
     logD('Lancement des tests !')
     self.controleur.ajouterEvenement('TEST')
예제 #9
0
def miseAJour(signal, valeur):
    signaux[signal] = valeur
    for k in signaux.keys():
        if signaux[k] is not signaux_precedents[k]:
            logD(str(signal) + ': ' + str(valeur))
            signaux_precedents[k] = signaux[k]
예제 #10
0
def ajouter(liste_signaux):
    logD('Ajout signal ' + str(liste_signaux))
    signaux.update(liste_signaux)
    signaux_precedents.update(liste_signaux)