labl{tk,gtk}

Transcription

labl{tk,gtk}
Programmation avancée – TD6: labl{tk,gtk}
Ocan Sankur <[email protected]>
19 Mars 2012
Voir la page des TPs: http://www.lsv.ens-cachan.fr/~sankur/prog2
Nous allons étudier deux librairies d’interface utilisateur graphique (GUI) en Caml: lablgtk2
et labltk. Le premier est à base de classes, l’autre de modules.
1
lablgtk2
1.1
Installation
Lablgtk2 est une interface, orientée objets, à la librairie gtk2+1 . Télécharger et extraire les
sources de lablgtk2 sur http://lablgtk.forge.ocamlcore.org/. Dans le répertoire extrait,
faire ./configure, make et make install. Si vous utilisez les machines de la salle, faites plutôt
make install DESTDIR=..., en précisant un répertoire d’installation local (par ex. /lablgtk2).
Si vous avez votre propre machine, par exemple sous Ubuntu, vous pouvez aussi faire sudo
apt-get install libgtk2.0-dev.
Vous pouvez tester en allant dans le répertoire examples et en tapant:
ocaml -I $DESTDIR/usr/lib/ocaml/lablgtk2 lablgtk.cma gtkInit.cmo \
-I $DESTDIR/usr/lib/ocaml/stublibs hello.ml
où $DESTDIR est là où vous avez installé lablgtk2. Si vous avez utilisé l’installation par défaut
(par ex. avec apt-get), alors vos fichiers sont probablement dans /usr/lib/ocaml/lablgtk2.
Si vous n’arrivez pas à compiler / installer, ce n’est pas grave, passez à la suite du sujet sans
perdre trop de temps.
Vous pouvez consulter la documentation en ligne sur la page citée en haut.
1.2
Questions
On va découvrir l’utilisation de la librairie à travers le simple programme examples/nihongo.ml.
Dans ce programme, on crée plusieurs objets: window, text, button, label... Chaque objet
provient d’une classe différente. Quelle est la relation entre ces classes (en terme d’héritage par
exemple)?
Qu’est-ce qui se passe concrètement quand on appelle GButton.button?
Expliquer l’argument optionnel ~packing qui apparaı̂t dans les constructeurs de ces objets.
Quel est son type, et que fait-il?
Que retourne window#connect? Expliquer ce qui se passe à la ligne 23.
1 www.gtk.org
1
Mettre un titre à cette fenêtre, et faire en sorte qu’il affiche “Au revoir” dans le terminal
avant de quitter.
On regarde maintenant examples/fixpoint.ml. Expliquer l’appel entry#coerce à la ligne
27. Est-il nécessaire?
2
labltk
La distribution standard de Caml contient normalement la librairie Tk. Pour pouvoir examiner
les signatures des modules, vous pouvez utiliser ocamlbrowser. Pour cela, il faut aller dans le
menu Modules/Path Editor et ajouter le répertoire /usr/lib/ocaml/labltk ou bien l’équivalent
dans votre système (je suis là pour vous aider). Il peut être intéressant aussi de regarder les
fichiers .mli, qui se trouvent dans le même répertoire.
On considère un petit calculateur de pgcd, disponible sur la page des TDs. Pour exécuter le
programme, comme d’habitude, il faut préciser les fichiers d’interface et les librairies à Ocaml:
ocaml -I +labltk labltk.cma monfichier.ml
Vous pouvez aussi utiliser labltk monfichier.ml s’il est installé.
Quel est le type de Frame.create, Label.create ? Quell est donc la représentation d’un
élément graphique (fenêtre, bouton etc).
Que fait la fonction pack? Identifier la restriction dans l’utilisation de pack.
Télécharger tetris.ml et l’image gif sur la page de TDs. Ajouter à ce programme un menu
Aide, qui affiche une fenêtre d’information.
Si vous avez fini, faites la même chose avec examples/pousse.ml dans votre répertoire de
lablgtk2.
2