Nous allons construire une première boîte de dialogue saisissant un nombre
et affichant le carré de ce nombre quand on clique sur le bouton OK.
Le programme R ayant permis sa réalisation a la forme suivante :
library(tcltk)
# Création de la boite de dialogue (nommée formu)
formu = tktoplevel()
tktitle(formu) = "Calcul du carre d'un nombre"
# fonctions associées aux boutons OK et Quitter
executer = function() {
# à compléter...
}
quitter = function() { tkdestroy(formu) }
# creation des composants : label_nombre, zone_nombre, bouton_ok...
label_nombre = tklabel(formu, text="nombre : ")
zone_nombre = tkentry(formu)
bouton_ok = tkbutton(formu, text="OK", command=executer)
# associé à la fonction executer
bouton_quitter = tkbutton(formu, text="Quitter", command=quitter)
# associé à la fonction quitter
# positionnement des composants sur 2 lignes
tkgrid(label_nombre, zone_nombre)
tkgrid(bouton_ok, bouton_quitter)
# affichage de la boite de dialogue
tkfocus(formu)
Cette boîte de dialogue comporte 4 composants :
un label (label_nombre), une zone de texte (zone_nombre)
et deux boutons de commandes (bouton_ok et bouton_quitter).
Ces composants sont affichés sur 2 lignes (car 2 appels à la fonction tkgrid).
Les boutons OK et Quitter sont associés aux fonctions executer et quitter.
La fonction quitter ferme la fenêtre.
La fonction executer, dont voici le code complet, calcule le carré du nombre
entré dans la zone de texte (zone_nombre), puis l'affiche dans la console R (print)
et dans une fenêtre graphique (tkmessageBox).
# fonction associée au bouton OK
executer = function() {
# recuperation du nombre entré
nombre = as.numeric( tkget(zone_nombre) )
# calculs
carre = nombre * nombre
reponse = paste("le carre de", nombre, "vaut", carre)
# affichage dans la console R et dans une boite de message
print( reponse )
tkmessageBox(message=reponse)
}
Il ne faut pas confondre la zone de texte (zone_nombre) avec sa valeur (nombre)
calculée avec la fonction tkget.
Si vous souhaitez réutiliser souvent une boîte de dialogue (j'en doute
pour celle-là !), il peut être conseillé de mettre
tout le code dans une fonction, d'enregistrer cette fonction dans
un fichier texte et de télécharger ce fichier texte en cas de besoin.
# définition d'une fonction pour faciliter la réutilisation
zoneTexte = function() {
formu = tktoplevel()
tktitle(formu) = "Calcul du carre d'un nombre"
...
tkfocus(formu)
}
Vous pouvez télécharger le fichier automatiser.R
qui contient la définition de cette fonction, le
sauvegarder sur votre disque dur, puis enfin exécuter son contenu
(commande sourcer du code R).
Ensuite, il ne vous reste plus qu'à appeler cette fonction :
# appel de la fonction pour ouvrir la boîte de dialogue
zoneTexte()