Développer des Applications Gnome avec Python (Partie 2)



Documents pareils
AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Comment sélectionner des sommets, des arêtes et des faces avec Blender?

Comment faire un Mailing A partir d une feuille Calc

Comment faire des étiquettes

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Comment sauvegarder ses documents

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE

Insérer des images dans Base

Construire des plug-ins pour SAS Management Console SAS 9.1

Form Designer Guide d utilisateur DOC-FD-UG-FR-01/01/12

Publier dans la Base Documentaire

TP2 : Client d une BDD SqlServer

Publier un Carnet Blanc

Présentation du langage et premières fonctions

Prise en main rapide

Correction des Travaux Pratiques Organiser son espace de travail

Silhouette Studio Leçon N 2

Service On Line : Gestion des Incidents

Atelier Le gestionnaire de fichier

Optimiser pour les appareils mobiles

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

BIRT (Business Intelligence and Reporting Tools)

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

26 Centre de Sécurité et de

PRÉSENTÉ PAR : NOVEMBRE 2007

Samsung Auto Backup Guide de démarrage rapide

Gestion d Active Directory à distance : MMC & Délégation

But du papier : Paramétrer WSUS pour récupérer les mises à jour et administrer le serveur WSUS

Introduction à Eclipse

Comment Définir une Plage de données Pour Utiliser Fonctions de Filtres et de Tris

Tutoriel. Votre site web en 30 minutes

Tutoriel première utilisation ICEM-CFD. Couche limite et modification du maillage en 2D

Travaux pratiques Détermination de la capacité de stockage des données

Comment créer un diagramme de Gantt avec OpenOffice.org

Manuel de System Monitor

COURS WINDEV NUMERO 3

Guide de l administrateur DOC-OEMCS8-GA-FR-29/09/05

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

KWISATZ_TUTO_module_magento novembre 2012 KWISATZ MODULE MAGENTO

Tapez le titre de la page «BASTIA ville méditerranéenne», puis allez deux fois à la ligne à l aide de la touche Entrée.

Guide d installation CLX.PayMaker Office (3PC)

Organiser le disque dur Dossiers Fichiers

Comment consolider des données

Création de Sous-Formulaires

Manuel d utilisation du site web de l ONRN

MISE AU POINT FINANCIÈRE GUIDE DE L UTILISATEUR. Le logiciel MISE AU POINT FINANCIÈRE est offert sous licence par EquiSoft.

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var - E mail : bij@agasc.fr / Tel : CONSIGNE N 1 :

0.1 Mail & News : Thunderbird

Tutoriel de formation SurveyMonkey

Objectifs du TP : Initiation à Access

CREG : versailles.fr/spip.php?article803

SOMMAIRE ÉTAPES OBLIGATOIRES. Récupérer le connecteur... 3

sommaire ÉTAPES OBLIGATOIRES Récupérer le connecteur... 3

Installation d'un serveur RADIUS

Avant-propos FICHES PRATIQUES EXERCICES DE PRISE EN MAIN CAS PRATIQUES

Tutorial Terminal Server sous

Importation et exportation de contenu

Conférence et partage avec NetMeeting

PROCÉDURE D AIDE AU PARAMÉTRAGE

Groupe Eyrolles, 2003, ISBN : X

WEB page builder and server for SCADA applications usable from a WEB navigator

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)


Utiliser un proxy sous linux

SQL Server Installation Center et SQL Server Management Studio

STRUCTURE DE L ORDINATEUR

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

Organiser les informations ( approche technique )

OpenOffice.org Calc Ouvrir un classeur

Manuel du client de bureau distant de KDE

Générer du code à partir d une description de haut niveau

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Créer sa première base de données Access Partie 4/4 - Création d un état

MO-Call pour les Ordinateurs. Guide de l utilisateur

< Atelier 1 /> Démarrer une application web

Stellar Phoenix Outlook PST Repair - Technical 5.0 Guide d'installation

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

Guide Expert Comptable Production Coala

GUIDE D UTILISATION DU BROWSER DE BEYOND 20/20

Le langage C. Séance n 4

FORMATION EXCEL 2010 Groupe LUCAS LOGICIA

Banque d images SVT. Créer et utiliser une banque d images avec Picasa 2. Version anglaise -Windows 98. Banque photo en SVT : page 1 /14

Documentation Liste des changements apportés

Initiation maintenir son ordinateur en forme

Initiation à Mendeley AUT2012

Manuel de l utilisateur. Soft-phone - Client VoIP 3CX Version 6.0

Manuel du Desktop Sharing

Documentation RBS Change E-Commerce Core

AIDE TECHNIQUE POUR L UTILISATION DE GÉODEQ III VUES D ENSEMBLE DU QUÉBEC

ECOWIN PRO. A retenir

Tropimed Guide d'installation

GUIDE DE DÉMARRAGE. SitagriPro Infinite FINANCEAGRI. Un service. c o r p o r a t e

GUIDE D UTILISATION DE L ISU SEPTEMBRE 2013 GUIDE D UTILISATION DU NAVIGATEUR UIS.STAT (VERSION BÊTA)

Installation d'un TSE (Terminal Serveur Edition)

Commencer avec Allplan Exchange. Nemetschek Allplan Systems GmbH, Munich. All rights reserved. Enregistrement

TAGREROUT Seyf Allah TMRIM

2 Moodle Guide 2c : banque de questions et activité Test. Version du service

Transcription:

LinuxFocus article number 224 http://linuxfocus.org Développer des Applications Gnome avec Python (Partie 2) par Hilaire Fernandes <hilaire/at/ofset.org> L auteur: Hilaire Fernandes est le vice-président d OFSET, une organisation pour promouvoir le développement de logiciels éducatifs libres pour le bureau Gnome. Il a aussi écrit Dr.Geo, un logiciel primé de géométrie dynamique, et il est actuellement occupé avec Dr.Genius un autre logiciel éducatif de mathématiques pour le bureau Gnome. Résumé: Cette série d articles est spécialement écrite pour des débutants en programmation sous Gnome et GNU/Linux. Le langage de développement choisi, Python, évite la surcharge habituelle avec des langages compilés comme le C. Avant d étudier cet article quelques notions de programmation sous Python sont nécessaires. Outils nécessaires Pour les besoins logiciels à l exécution du programme décrit dans cet article, vous pouvez vous référer à la liste de la même rubrique de la partie I de cette série d articles. Vous aurez aussi besoin : du fichier.glade original [ drill.glade ] ; du code source en Python [ drill.py ]. Pour l installation et l utilisation de Pyhton-Gnome et LibGlade vous pouvez aussi vous référer à la partie I.

Drill, notre support La première partie avait pour objectif de montrer les mécanismes et les modes d interactions entre les différents composants d un programme écrit sous une configuration de type Gnome, Glade, LibGlade et Python. L exemple utilisait le widget GnomeCanvas. Celui-ci nous a offert une illustration riche en couleur montrant l intérêt et la facilité de développement sous cette configuration. Pour les parties suivantes, je vous propose de mettre en place un cadre logiciel dans lequel nous illustrerons les différents widgets de Gnome. Le présent article s attache principalement à mettre en place ce cadre. Les articles suivants s appuieront sur celui-ci, en lui ajoutant des fonctionnalités, pour illustrer les différents widgets de Gnome. Notre cadre logiciel s appelle Drill. C est une plate-forme à caractère éducatif sur laquelle nous grefferons des exercices. Attention, les exercices ont pour seule prétention pédagogique d illustrer l usage des widgets! Construction de l interface avec Glade Les widgets La fenêtre de l application est créée à l aide de Glade. Comme dans l article précédent, vous créez dans un premier temps une fenêtre d une application Gnome. Dans celle-ci vous supprimez les menus et icônes inutiles. La zone principale de Drill est subdivisée en deux espaces grâce au widget GtkPaned.

Fig. 1 - Fenêtre principale de Drill Ils sont séparés verticalement par une poignée permettant d ajuster la subdivision. L espace de gauche est occupé par un arbre (widget GtkTree) dans lequel seront rangés par catégorie les intitulés des exercices. L espace à droite est vide, c est ici que nous grefferons les exercices eux-mêmes en fonction du choix de l utilisateur. Depuis Glade, la vue de l interface de Drill sous forme d arbre permet de comprendre son agencement :

Fig. 2 - Vue en arbre de l interface de Drill Dans la Fig. 2, nous voyons que le widget nommé hpanedtree (de type GtkPaned) ne contient qu un seul widget, frame2 (de type GtkFrame), c est celui-ci qui est à gauche. frame2 contient lui-même le widget exercicetree. En effet, il est préférable de placer d abord un widget GtkFrame avec une ombre de type GTK_SHADOW_IN dans un widget GtkPaned, cela évite de mordre sur la poignée. Pour finir la boîte de dialogue Gnome "À propos" de Drill peut ressembler à celle-ci Fig. 3 - Boîte de dialogue "À propos" de Drill Ses différentes rubriques sont éditées depuis Glade, dans le feuillet Widget de la fenêtre Propriétés. Les noms des widgets et des fonctions de traitement Appliquez les noms suivants à ces widgets afin de les manipuler sous ces noms depuis Pyhton. Fenêtre d application Gnome : drillapp Poignée séparant l arbre des exercices : hpanedtree Arbre des exercices : exercicetree Boîte de dialogue Gnome À-propos : about Ces widgets sont ceux dont les noms sont visibles sur la Fig. 2 Nous listons ici rapidement les noms des fonctions de traitement. Si vous avez besoin d informations complémentaires sur le sujet référez-vous à la partie I.

Nom de widget Signal Traitement about clicked gtk_widget_destroy about close gtk_widget_destroy about destroy gtk_widget_destroy button1 (icône nouveau dans la barre à outils clicked on_new_activate new activate on_new_activate drillapp destroy on_exit_activate exit activate on_exit_activate about activate on_about_activate Derniers ajustements Depuis Glade il est possible de spécifier la géométrie des widgets. Dans notre affaire, vous pouvez ajuster la taille de drillapp à 400 et 300 depuis l onglet Commun du panneau de Propriétés. Aussi, la position du diviseur des panneaux horizontaux peut être ajustée à 100 au lieu de 1. Ensuite, le widget exercicetree doit être ajusté afin de ne permettre qu une seule sélection à la fois. En effet un seul exercice peut être sélectionné à la fois. Depuis le panneau de Propriétés, choisir Selection->Single. Les autres options de ce widget sont de moindre importance. Voilà! C est fini en ce qui concerne Drill lui-même. Nous commencerons à développer des exercices dès le prochain article. Pour le moment nous allons voir comment utiliser l interface depuis Python et nous intéresser à la manipulation du widget GtkTree. Le code Python Le code source complet se trouve à la fin de ce document. Il doit être sauvegardé dans le même dossier que le fichier drill.glade. Les modules nécessaires from gtk import * from gnome.ui import * from GDK import * from libglade import *

L interface graphique avec LibGlade La construction de l interface graphique et la connection des fonctions de traitement avec LibGlade se fait de façon analogue à l exemple précédent. Nous ne revenons pas sur cet aspect là. Dans le programme python nous définissons des variables globales : currentexercice: référence du widget représentant l exercice courant. Celui-ci est placé dans la partie droite de la fenêtre d application de Drill. Les exercices seront également créés à partir de Glade. exercicetree : référence de l arbre à gauche dans la fenêtre d application de Drill. label : référence un label (GtkLabel). Ce label est un palliatif à l absence d exercice pour le moment. Il sera donc placé à droite de l arbre -- où les exercices prendront place -- et nous y afficherons les identifiants des exercices sélectionnés. L arbre est créé par LibGlade, sa référence est récupérée par l appel suivant: exercicetree = wtree.get_widget ("exercicetree") Nous avons également besoin de la référence des panneaux horizontaux, en fait la référence du conteneur (GtkPaned) des deux panneaux horizontaux séparés par une poignée. Celui à gauche contient l arbre ; celui à droite les exercices, nous y placerons pour le moment le label : paned = wtree.get_widget ("hpanedtree") label = GtkLabel ("Aucun exercice de sélectionné") label.show () paned.pack2 (label) Une fois encore l utilisation conjointe du Manuel de référence de GTK+ -- sur les objets GtkLabel et GtkPaned -- et du source Python /usr/lib/python1.5/site-packages/gtk.py offre le discernement nécessaire à la bonne utilisation des objets. Le widget GtkTree Nous arrivons ici à l élément essentiel de notre article, à savoir l utilisation d un arbre de type GtkTree. L arbre est rempli par les appels successifs aux fonctions addmathexercices(), addfrenchexercices(), addhistoryexercices() et addgeographyexercices(). Elles sont toutes semblables. Chacune de ces fonctions ajoutent une sous catégorie (un sous arbre) ainsi que des titres d exercices (les items): def addmathexercices (): subtree = addsubtree ("Mathématiques") addexercice (subtree, "Exercice 1", "Math. Ex1")

addexercice (subtree, "Exercice 2", "Math. Ex2") Le sous-arbre def addsubtree (name): global exercicetree subtree = GtkTree () item = GtkTreeItem (name) exercicetree.append (item) item.set_subtree (subtree) item.show () item.connect ("select", selectsubtree) return subtree Pour créer un sous-arbre dans un arbre existant, il faut créer deux choses : un arbre GtkTree et un item GtkTreeItem portant le nom du sous-arbre. Ensuite l item est ajouté à l arbre racine -- notre arbre contenant toutes les catégories -- puis nous greffons notre sous-arbre à l item grâce à sa méthode set_subtree(). Enfin, l événement select est connecté à l item, ainsi lorsque la catégorie est sélectionnée, la fonction selectsubtree() est appelée. GtkTreeItem def addexercice (category, title, idvalue): item = GtkTreeItem (title) item.set_data ("id", idvalue) category.append (item) item.show () item.connect ("select", selecttreeitem) item.connect ("deselect", deselecttreeitem) Les items portent comme titre les noms des exercices, ici en général simplement Exercice 1, 2,... À chaque item nous associons un attribut supplémentaire, id. GTK+ offre en effet la possibilité d ajouter à tout objet de type GtkObject -- dont tous les widgets de GTK+ sont issus -- des attributs. Pour ce faire il existe deux méthodes set_data (key, value) et get_data (key) pour initialiser et récupérer la valeur d un attribut. L item est ensuite ajouté à sa catégorie -- un sous arbre. Sa méthode show() est appelée, elle est nécessaire pour forcer l affichage. Enfin les événements select et deselect sont connectés, l événement deselect prend lieu lorsque l item perd la sélection. Chronologiquement, la méthode deselecttreeitem() est appelée sur l item perdant la sélection, puis selecttreeitem() est invoquée sur l item prenant la sélection. Les fonctions de traitement Nous avons défini trois fonctions de traitement selecttreeitem(), deselecttreeitem() et selectsubtree(). Ces méthodes mettent à jour le texte du label -- placé dans la zone de droite -- avec la valeur de l attribut id. C est tout pour le moment.

Le mot final Nous avons ici mis en place l infrastructure dans laquelle nous grefferons des exercices -- autant de nouveaux widgets que nous découvrirons. Nous avons principalement étudié le widget GtkTree et comment associer des attributs à des widgets. Ce dernier mécanisme est très souvent utilisé pour récupérer dans les fonctions de traitement des informations supplémentaires associées, ce que nous avons fait ici. En attendant le prochain article, vous pouvez essayer de transformer le jeu Couleur, étudié en partie 1, comme un exercice dans Drill. Appendice: Le source complet #!/usr/bin/python # Drill - Teo Serie # Copyright Hilaire Fernandes 2001 # Release under the terms of the GPL licence # You can get a copy of the license at http://www.gnu.org from gtk import * from gnome.ui import * from GDK import * from libglade import * exercicetree = currentexercice = label = None def on_about_activate(obj): "display the about dialog" about = GladeXML ("drill.glade", "about").get_widget ("about") about.show () def on_new_activate (obj): global exercicetree, currentexercice def selecttreeitem (item): global label label.set_text ("L exercice " + item.get_data ("id") + "est sélectionné.") def deselecttreeitem (item): global label label.set_text ("L exercice " + item.get_data ("id") + "est désélectionné.")

def selectsubtree (subtree): global label label.set_text ("Aucun exercice de sélectionné") def addsubtree (name): global exercicetree subtree = GtkTree () item = GtkTreeItem (name) exercicetree.append (item) item.set_subtree (subtree) item.show () item.connect ("select", selectsubtree) return subtree def addexercice (category, title, id): item = GtkTreeItem (title) item.set_data ("id", id) category.append (item) item.show () item.connect ("select", selecttreeitem) item.connect ("deselect", deselecttreeitem) def addmathexercices (): subtree = addsubtree ("Mathématiques") addexercice (subtree, "Exercice 1", "Math. Ex1") addexercice (subtree, "Exercice 2", "Math. Ex2") def addfrenchexercices (): subtree = addsubtree ("Français") addexercice (subtree, "Exercice 1", "Français Ex1") addexercice (subtree, "Exercice 2", "Français Ex2") def addhistoryexercices (): subtree = addsubtree ("Histoire") addexercice (subtree, "Exercice 1", "Histoire Ex1") addexercice (subtree, "Exercice 2", "Histoire Ex2") def addgeographyexercices (): subtree = addsubtree ("Géographie") addexercice (subtree, "Exercice 1", "Géographie Ex1") addexercice (subtree, "Exercice 2", "Géographie Ex2") def initdrill (): global exercicetree, label wtree = GladeXML ("drill.glade", "drillapp") dic = {"on_about_activate": on_about_activate, "on_exit_activate": mainquit,

"on_new_activate": on_new_activate} wtree.signal_autoconnect (dic) exercicetree = wtree.get_widget ("exercicetree") # Temporary until we implement real exercice paned = wtree.get_widget ("hpanedtree") label = GtkLabel ("Aucun exercice de sélectionné") label.show () paned.pack2 (label) # Free the GladeXML tree wtree.destroy () # Add the exercices addmathexercices () addfrenchexercices () addhistoryexercices () addgeographyexercices () initdrill () mainloop () Site Web maintenu par l équipe d édition LinuxFocus Hilaire Fernandes "some rights reserved" see linuxfocus.org/license/ http://www.linuxfocus.org Translation information: fr --> -- : Hilaire Fernandes <hilaire/at/ofset.org> 2005-01-14, generated by lfparser_pdf version 2.51