Articles

Affichage des articles du juin, 2024

Développer une application fenêtrée en langage Python.

Image
Ce blog décrit les principes du développement d'une application fenétrée en utilisant les objets de la bibliothèque WinLib. Cette bibliothèque s'appuie sur les modules TKinter et PIL de Python. Elle offre plusieurs classes de base pour automatiser ce qui est commun à toutes les applications. Ce qui permet d'éviter de parcourir les documentations  fastidieuses de TkInter et arriver rapidement à un résultat opérationnel. L'application développée suit le patron de conception Open/Save, comme les applications standars de Microsoft Word ou Excel. Cet article rassemble les liens vers les autres articles du blog. C'est en quelque sorte la table des matières du blog. Il y a deux sortes d'articles : des articles formalisés sous forme de tutoriels destinnés à apprendre l'usage de la bibliothèque WilLib, et des articles techniques donnant une description exhaustive de chaque classes de la bibliothèque avec des exemples. Utilisation des modules de la bibliothèq...

Gestion des menus

Image
La classe Application fournit une référence sur le menu TkInter via l'attribut self.menu . Cet attribut est une instance de la classe tk.Menu . De ce fait, la modification ou l'extension du menu peut être effectuée par programmation Python, via les primitives de TkInter. Cependant, les menus d'une application fenêtrée sont essenciellement contitués de texte, et donc soumis potentiellement à une localisation dans une langue ou dans une autre. C'est pourquoi nous avons pris le parti d'embarquer la structure des menus dans le fichier de localisation. Et de fournir une méthode self.parseMenu() qui analyse le fichier de localisation pour créer les instances Python de la barre de menu. Fichier de localisation Comme indiqué dans l'article sur la localisation des applications , le fichier de localisation est un fichier structuré en JSON et les élements constituant la barre de menus se trouve dans la rubrique "menu". Au v...

Localisation de l'application

Image
Comme vu dans l'article traitant de l'usage de la classe Application , un paramètre déterminant à passer au constructeur de cette classe est le paramètre de localisation. Par défaut, ce paramètre a la valeur 'en' (pour lnague anglaise). Mais on peut l'utiliser pour d'autres langues comme 'fr' pour le français. Mais de quoi s'agit-il ? L'un des problèmes apparu avec le développement des applications fenêtrées et de leur diffusion par Internet sur le continent européen et ailleurs, c'est leur traduction dans le language de l'utilisateur. Des expressions dans le langage du développeurs telles que icônes et chaines de caractères se trouvent dissiminées un peu partout dans la programmation. Cela oblige à une revue détaillée de tout le code pour traduire ces expressions. Ce qui peut entrainer des décalages d'affichage puisque que le texte de chaque langue n'occupe pas exactement le même espace. Pour régler ce problème, Wi...

Classe BarSeparator

Image
Module : WinLib.Bars Héritée de : Widget Version : 1.0 - 2024 Classes dérivées : Cette classe définit un widget pour afficher un séparateur dans la barre. Il s'agit d'un simple espace dont la largeur par défaut est de 20 pixels. Cette classe peut être dérivée pour afficher un séparateur plus sophistiqué. Méthodes publiques : self.__init__(self, appli, bar, width=20, **kwargs) Cette méthode est le constructeur de la classe. Paramètre Type Signification Défaut appli WinLib.Application Référence de l'application propriétaire de la barre. bar WinLib.StatusBar Barre de status parente. width ImageTk.PhotoImage Image affichée comme label. 20 kwargs dictionnaire Liste de paramètres supplémentaire de la classe tk.Frame de TkInter. bar.addBarItem('tool1-1', ToolBarItem(self, bar, image=self.resources['tool1-1.png'], command=self.on_action1_1)) bar.addBarItem('too...

Classe StatusBarItem

Image
Module : WinLib.Bars Héritée de : Widget Version : 1.0 - 2024 Classes dérivées : Cette classe définit un widget pour afficher un status dans la barre de status. Cette classe fonctionne comme le widget tk.Label pour lequel on peut qualifier le status alternativement par une image ou un texte. Attributs d'instance Attribut Type Signification self.value String Valeur du status. Méthodes publiques : self.__init__(self, appli, bar, text=None, image=None, value="000000", **kwargs) Cette méthode est le constructeur de la classe. Paramètre Type Signification Défaut appli WinLib.Application Référence de l'application propriétaire de la barre. bar WinLib.StatusBar Barre de status parente. text String Texte affiché comme label. None image ImageTk.PhotoImage Image affichée comme label. None value String Texte exprimant la valeur du status. "000000"...

Classe StatusBar

Image
Module : WinLib.Bars Héritée de : Bar Version : 1.0 - 2024 Classes dérivées : Cette classe définit le fonctionnement d'une barre de status. La barre d'outil s'affiche en bas de la fenêtre principale de l'application. Elle permet d'afficher des données comme la position, la taille des objets métier en temps réel. Méthodes publiques self.__init__(self, appli, parent, **kwargs) Ce méthode est le constructeur de la classe. Paramètre Type Signification Défaut application WinLib.Application Référence de l'application propriétaire de la barre. parent tk.Frame Fenêtre parente de la barre. kwargs dictionnaire Liste de paramètres supplémentaire de la classe tk.Frame de TkInter. self.addBarItem(self, name, item) Lorsque les items sont instanciés, TkInter les rend déjà visibles. Pour qu'ils soient gérés par le dictionnaire, ils doivent être ajoutés par l'invocation d...

Classe ToolBarItem

Image
Module : WinLib.Bars Héritée de : Widget Version : 1.0 - 2024 Classes dérivées : Cette classe définit un widget pour afficher un bouton dans la barre d'outil. Cette classe fonctionne comme le widget tk.Button de tkInter pour lequel on peut qualifier le status alternativement par une image ou un texte. Mais, ici, on privilégie l'image. Méthodes publiques : self.__init__(self, appli, bar, image, command, **kwargs) Cette méthode est le constructeur de la classe. Paramètre Type Signification Défaut appli WinLib.Application Référence de l'application propriétaire de la barre. bar WinLib.ToolBar Barre d'outils contenant les boutons. image ImageTk.PhotoImage Image affichée sur le bouton. command Method Méthode exécutée lorsque l'utilisateur clique le bouton. kwargs dictionnaire Liste de paramètres supplémentaire de la classe tk.Frame de TkInter. bar.addBarItem(...

Classe ToolBar

Image
Module : WinLib.Bars Héritée de : Bar Version : 1.0 - 2024 Classes dérivées : Cette classe définit le fonctionnement d'une barre d'outils. La barre d'outil s'affiche en haut de la fenêtre principale de l'application. Elle permet d'afficher des boutons pour lancer des commandes. Méthodes publiques self.__init__(self, appli, parent, **kwargs) Ce méthode est le constructeur de la classe. Paramètre Type Signification Défaut application WinLib.Application Référence de l'application propriétaire de la barre. parent tk.Frame Fenêtre parente de la barre. kwargs dictionnaire Liste de paramètres supplémentaire de la classe tk.Frame de TkInter. self.addBarItem(self, name, item) Lorsque les items sont instanciés, TkInter les rend déjà visibles. Pour qu'ils soient gérés par le dictionnaire, ils doivent être ajoutés par l'invocation de cette méthode. Par...

Classe Bar

Image
Module : WinLib.Bars Héritée de : Widget Version : 1.0 - 2024 Classes dérivées : ToolBar Cette classe définit une classe de base pour toutes les barres d'outils affichées dans la fenêtre d'une application. Cette classe fonctionne comme un dictionnaire Python. Pour que les items contenus dans la barre soit pris en charge par ce dictionnaire, il doivent être ajoutés par l'invocation de la méthode addBarItem(). Méthodes publiques self.__init__(self, appli, parent, **kwargs) Ce méthode est le constructeur de la classe. Paramètre Type Signification Défaut application WinLib.Application Référence de l'application propriétaire de la barre. parent tk.Frame Fenêtre parente de la barre. kwargs dictionnaire Liste de paramètres supplémentaire de la classe tk.Frame de TkInter. self.addBarItem(self, name, item) Lorsque les items sont instanciés, TkInter les rend déjà visibles. Pour qu'...

Classe Widget

Image
Module : WinLib.Widgets Héritée de : tk.Frame Version : 1.0 - 2024 Classes dérivées : Bar Cette classe est une classe de base basée sur tk.Frame qui va servir pour la création de tous les widgets de l'application. Elle offre une classe alternative à la classe tk.Frame de TkInter qui a l'avantage de maintenir une référence sur l'application propriétaire du widget et ainsi donner accès aux propriétés de l'application et notamment aux informations relatives à la localisation et à la base de ressources images. Attributs d'instance self.application Cet attribut est une référence sur l'application propriétaire du widget. Cela permet à avaoir un accès aux propriétés de l'applications pour le codage du widget. self.local Cet attribut est une référence sur le dictionnaire des données de localisation de la classe Application . Voir l'article sur la localisation pour l'usage. self.re...

Classe Application

Image
Module : WinLib.Application Héritée de : object Version : 1.0 - 2024 Classes dérivées : Cette classe définit le fonctionnement de la fenêtre principale d'une application Window. L'application peut être localisée en passant l'acronyme du langage souhaité à l'instanciation. Les paramètres de localisation sont fournis dans un fichier json. La bibliothèque WinLib fournit deux fichier de localisation qui embarquent les fonctionnalités de base : fr.json pour le français et en.json pour l'anglais. Mais il est possible d'ajouter et de traduire d'autres fichiers à volonté selon les langues souhaitées. Voir l'article sur la localisation pour la compréhension de la structure de ces fichiers. Attributs d'instance self.local Cet attribut est le dictionnaire des données de localisation. Voir l'article sur la localisation pour l'usage. self.root ...

Créer ma première application

Image
L'utilisation de la bibliothèque WinLib rend très simple la création d'une application fenêtrée. Evidemment, dans cet exemple l'application ne fait rien du tout. Mais tout l'environnement de fonctionnement dans le modèle Open/Save est prêt à l'emploi, y compris les menus. De ce fait, le développement d'une application se résume à dériver la classe Application de base et à surcharger quelques méthodes. La seule instanciation de la classe de base Application affiche ceci : Instaciation de la classe Application Voici l'exemple de code Python : # -*- coding: utf-8 -*- import sys sys.path.append('./WinLib') from WinLib.Application import * myApp = Application(localization='fr')   Explications : La première ligne est une convention Python qui indique que le code du programme est encodé dans le standard UTF-8. Le fait de tout encoder en UTF-8 permet d'éviter les problèmes d'affichage des...