Le langage Python fait parti des 2 langages actuellement disponibles dans GeeXLab (l'autre langage étant le Lua). Le Python est disponible dans toutes les versions de GeeXLab (Windows, Linux, macOS, Raspberry Pi et Tinker Board) via un plugin. C'est la grande différence avec le Lua qui lui est intégrée au noyau de GeeXLab. Le plugin Python est automatiquement chargé par GeeXLab s'il est présent dans le répertoire des plugins.
Le Python est un langage de programmation vraiment très puissant. Il est totalement orienté objet et permet d'écrire du code concis. Python est un langage mature et possède une grande communauté. Un des grands avantage de Python (surtout comparé à Lua) est sa librairie standard qui est vraiment complète. Juste pour vous donner un exemple, il possible, avec une installation standard de Python, de rapidement coder un accès base de données, un serveur TCP/IP ou de dézipper un fichier. Je pense que c'est cette très grande richesse au niveau fonctionnalités qui m'a séduit.
A mon gout, un des gros inconvénients de Python est sa syntaxe très rigide et cette indentation stricte. Mais une fois passé ce cap, le Python est tout aussi agéable à utiliser que le Lua.
Il est tout à fait possible d'utiliser Python et Lua ensemble dans une même démo GeeXLab. Ces deux langages ne sont pas mutuellement exclusifs. Chaque langage est un outil. Et GeeXLab est une boîte à outils. On peut très bien imaginer une démo dans laquelle un des scripts d'initialisation doit aller récupérer des fichiers de données sur un serveur web. Cette fonctionnalité peut être facilement programmée avec un script en Python, tandis que le reste des scripts est en Lua. Il n'y a aucune contrainte. Une démo peut avoir trois scripts INIT (deux en Lua et un en Python), un script FRAME en Lua (ou Python) et un script TERMINATE en Python.
Juste pour se fixer les idées, voici quelques lignes de Python:
a = 5
b = 2
c = a + b
d = 0
if (c > 5):
d = 1
else:
d = -1
s = "Ceci est une chaine"
s += " de caracteres"
x = 0
for i in range(0, 10):
x = x + 1
def myKoolFunc(a, b, c):
# indentation!!!
# Do something useful with a, b and c:
sum = a+b+c
avg = sum/3
return sum, avg
x, y = myKoolFunc(1, 2, 3)
Python existe en deux grandes versions: Python 2.x et Python 3.x. Dans sa version actuelle, GeeXLab se limite à Python 2.x. Mais le support de Python 3.x a déja été testé et peut être que cette année ou très certainement l'année prochaine (donc 2019), le plugin Python 3.x deviendra une priorité car la branche 2.x de Python arrivera en fin de vie en 2020. Après 2020, le plugin Python 2.x sera toujours disponible et les nouvelles fonctions GeeXLab y seront ajoutés mais les librairies Python qui servent à compiler le plugin ne seront plus mises à jour.
Le support de Python 3 est disponible à partir de GeeXLab 0.26+. GeeXLab dispoise maintenant de 3 languages de scripting: Lua, Python 2 et Python 3. Même si Python 2 et Python 3
sont tous les deux du Python, ils sont quand même disponibles sous la forme de deux plugins différents.
Il est possible de d'avoir Python 2 et Python 3 dans une même démo, de la même manière qu'il est possible d'avoir Lua et Python dans la même demo. GeeXLab 0.26+ introduit deux
nouvelles valeurs pour l'attribut language du noeud script: PYTHON_2 et PYTHON_3.
Voilà quelques liens:
Et pour finir, voilà un exemple de démo GeeXLab qui utilise Python. La demo est composée de trois fichier: le XML principal, le script INIT et le script FRAME.
A titre de comparaison, la même démo en Lua se trouve ICI.
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<glsl_hacker>
<window name="win3d01" title="Hello World!" width="700" height="200" />
<script name="init_scene" run_mode="INIT" language="PYTHON_2" filename="init.py" />
<script name="update_scene" run_mode="FRAME" language="PYTHON_2" filename="frame.py" />
</glsl_hacker>
import gh_utils
import gh_renderer
font = gh_utils.font_create("Tahoma", 14)
gh_renderer.clear_color_buffer(0.4, 0.4, 0.4, 1.0)
x = 10
y = 20
gh_utils.font_render(font, x, y, 1.0, 1.0, 0.0, 1.0, "Hello World from GeeXLab!")
x = 10
y = 40
elapsed_time = gh_utils.get_elapsed_time()
gh_utils.font_render(font, x, y, 1.0, 1.0, 1.0, 1.0, "Elapsed time: " + str(elapsed_time))