Mon premier programme graphique avec gi-gtk

Introduction

L'idée est très simple : créer un mini programme qui affiche une fenêtre graphique avec un champs de texte et un bouton OK.
Lorsqu'on écrit le bon mot et qu'on clique sur le bouton OK (ou qu'on tape sur la touche 'entrée'), le programme affiche une nouvelle fenêtre avec le mot 'BRAVO'
Si ce n'est pas le bon mot, le programme quitte !

Pour afficher une fenêtre graphique, le plus simple est d'utiliser le framework gtk.
Avec Haskell, on va simplement installer la librairie gi-gtk.


Installation

Passer en root

su -

Installer gtk

cabal install gtk

Écrire le programme

On peut à présent écrire notre programme :
(Ouvrez votre éditeur de code et copiez-collez)

import Graphics.UI.Gtk
import Control.Monad.IO.Class (liftIO) -- Importation pour utiliser liftIO

main :: IO ()
main = do
initGUI
window <- windowNew
set window [windowTitle := 'Devinez']

-- Définir les dimensions de la fenêtre graphique
widgetSetSizeRequest window 200 100 -- Exemple : largeur 800px, hauteur 600px

-- Connecter le signal 'destroy' à l'action 'mainQuit' en utilisant 'liftIO'
on window destroyEvent $ liftIO mainQuit >> return False

-- Création du champ de texte
entry <- entryNew
set entry [entryText := '']

-- Connecter le signal 'entryActivate' du champ de texte à la fonction onButtonClick
on entry entryActivate $ onButtonClick entry -- Gère la pression sur 'Entrée'

-- Création du bouton
button <- buttonNewWithLabel 'OK'

-- Connecter le signal 'buttonActivated' à la fonction 'onButtonClick'
on button buttonActivated $ onButtonClick entry

-- Création de la disposition (layout)
vbox <- vBoxNew False 5
containerAdd vbox entry
containerAdd vbox button
containerAdd window vbox

widgetShowAll window
mainGUI

-- Fonction appelée lorsque le bouton 'OK' est cliqué ou que la touche 'Entrée' est pressée
onButtonClick :: Entry -> IO ()
onButtonClick entry = do
text <- entryGetText entry -- Récupération du texte entré
if text == 'magique'
then do
dialog <- messageDialogNew Nothing [] MessageInfo ButtonsOk 'BRAVO'
dialogRun dialog
widgetDestroy dialog
else mainQuit

Enregistrez-le sous 'motmagique.hs'


Compiler le programme

Revenez sur votre terminal, déplacez-vous à l'endroit où est stocké votre programme puis compilez-le :

# ghc --make motmagique.hs
Loaded package environment from
/root/.ghc/x86_64-freebsd-9.6.4/environments/default
[1 of 2] Compiling Main ( motmagique.hs, motmagique.o )
[2 of 2] Linking motmagique
#

Votre programme est à présent compilé et prêt à être exécuté.
Au passage, un nouveau fichier est apparu : motmagique


Lancer le programme

./motmagique

Voilà, votre premier programme en Haskell est terminé.
Vous pouvez désormais créer un programme avec des fenêtres !



↑ Haut de page