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()
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 !")
def __init__(self, diagramme=None): self.evenements = [] self.diagramme = Diagramme() if diagramme is None else diagramme logI('Lancement du contrôleur, période de rafraîchissement: ' + str(self.periode) + ' millisecondes.')
def build(self): logI('Chargement de Kivy...') return self.gui
from kivy.app import App from logger import logI from gui import GUI from controleur import Controleur from diagramme import Diagramme class GrafcetApp(App): """ Classe principale de l'application. Elle lance le modèle de données (classe Diagramme), la GUI (dépendante de kivy - www.kivy.org), et le contrôleur (classe Controleur). """ diagramme = Diagramme() controleur = Controleur(diagramme) gui = GUI(controleur) def build(self): logI('Chargement de Kivy...') return self.gui if __name__ == '__main__': logI("Démarrage de l'application !") GrafcetApp().run()
def update(self): logI("Update!") update_data = self.controller.update() self.last_updated = update_data['last_updated'] self.next_duty = update_data['next_duty'] self.next_reporting = update_data['next_reporting']