Dans le chapitre précédent, nous avons vu que GrimOS ne possède pas de "bureau" au sens Unix du terme. Chaque fenêtre n'est en fait qu'un petit composant (un Frame Tkinter) dessiné à l'intérieur de l'application principale.
Maintenant que vous avez compris l'architecture de GrimOS (Chapitre 4) et que votre environnement de développement à distance est prêt (Chapitre 3), il est temps de mettre les mains dans le code !
Dans ce chapitre, nous allons créer ensemble une application de A à Z : une petite Calculatrice.
Toutes les applications de GrimOS vivent de manière indépendante dans le dossier apps/.
Pour commencer, créez un nouveau dossier nommé calculatrice dans ce répertoire.
💻 Terminal :
cd grimos_build/apps/
mkdir calculatrice
À l'intérieur de ce dossier, créez un fichier Python nommé obligatoirement app.py. C'est le point d'entrée que le moteur de GrimOS cherchera à lancer.
Ouvrez le fichier app.py. Pour qu'une application soit reconnue par le système, elle doit posséder une fonction nommée start(window, app_manager=None, **kwargs).
L'argument window correspond au "panneau intérieur" de la fenêtre. C'est un simple cadre (Frame) Tkinter dans lequel nous avons le droit de dessiner.
Copiez le code suivant :
import tkinter as tk
from tkinter import messagebox
def start(window, app_manager=None, **kwargs):
# Changement de la couleur de fond du panneau
window.configure(bg="#f0f0f0")
# Titre de l'application
titre = tk.Label(window, text="Calculatrice GrimOS", font=("Arial", 16, "bold"), bg="#f0f0f0")
titre.pack(pady=10)
# Un champ de texte pour taper le calcul
entree = tk.Entry(window, font=("Arial", 14), width=20)
entree.pack(pady=10)
# Fonction qui sera appelée quand on clique sur le bouton
def calculer():
expression = entree.get()
try:
# Évaluation mathématique simple
resultat = eval(expression)
messagebox.showinfo("Résultat", f"Le résultat est : {resultat}")
except Exception as e:
messagebox.showerror("Erreur", "Calcul invalide !")
# Le bouton d'action
btn = tk.Button(window, text="Calculer", font=("Arial", 12), command=calculer)
btn.pack(pady=10)
Explications :
tkinter pour dessiner nos boutons et nos champs de texte.window comme "parent" pour tous nos composants (Label, Entry, Button). C'est ce qui permet à l'application d'être proprement contenue dans la fenêtre générée par GrimOS.eval() est utilisée ici pour la simplicité de l'exemple afin de calculer mathématiquement le texte tapé par l'utilisateur.Si vous lancez GrimOS maintenant, votre application existe bien sur le disque dur, mais le système ne la connaît pas encore. Il faut l'inscrire dans le grand registre : le fichier config/applications.json.
Ouvrez ce fichier et ajoutez un nouveau bloc à la fin de la liste (n'oubliez pas la virgule après le bloc précédent !) :
{
"name": "Calculatrice",
"module": "apps.calculatrice.app",
"icon": "icons/terminal.png",
"category": "Bureautique"
}
Note : Pour l'icône, nous utilisons ici temporairement l'icône du terminal (icons/terminal.png). Vous pourrez par la suite ajouter votre propre fichier calculatrice.png dans le dossier icons/.
C'est l'heure de vérité. Relancez GrimOS (ou cliquez sur "Redémarrer GrimOS" dans le menu Démarrer si vous êtes déjà connecté).
Une magnifique fenêtre s'ouvre ! Vous pouvez la déplacer en cliquant sur sa barre de titre bleue, la redimensionner (si autorisé) et la fermer avec la croix rouge. Tout ce "simulacre de fenêtre" a été généré automatiquement par core/window.py sans que vous n'ayez eu à écrire une seule ligne de code pour le gérer.
Tapez 5 + 5 * 2 dans le champ et cliquez sur Calculer. Une petite fenêtre d'alerte s'ouvrira pour vous afficher le résultat : 15.
Félicitations, vous venez de créer votre première application native pour GrimOS !
L'architecture est volontairement d'une simplicité enfantine. Que vous vouliez développer un simple lecteur de musique, un jeu de démineur ou un outil de surveillance réseau, le principe sera exactement le même : un dossier dans apps/, une fonction start(), et une déclaration JSON.
La seule limite est votre imagination et vos connaissances en Python !