Section Numérique   –   Lycée Saint-Paul IV

Classification périodique des éléments
Tableau de Mendeleïev

ClassificationPériodoque


I. Présentation

1. L'équipe projet

Photo de l'équipe
Dans le cadre de la spécialité Informatique et Science du Numérique (ISN),
nous avons eu à réaliser un projet en groupe.

Nous avons choisi de créer un tableau périodique des éléments chimiques interactif en langage Python avec une interface graphique.

L'équipe projet se compose de:

- Pauline Moréno

- Salomé Bensaïd


2. Objectif du projet

But du projet :
Le but de notre projet est de créer un programme accessible aux élèves et au professeurs de sciences regroupant toutes les informations nécessaires (niveau lycée) sur les différents éléments chimiques du tableau périodique.

Résumé :
Le programme développé en langage Python doit dans un premier temps afficher l'ensemble de la classification périodique avec les symboles des éléments par période et par colonne : une couleur sera affectée à chaque famille : gaz nobles, halogènes, alcalins... L'affichage doit se faire dans une fenêtre graphique.
Ensuite l'utilisateur en cliquant sur un élément ouvre une nouvelle fenêtre graphique indiquant les principales propriétés de l'élément : numéro atomique Z , nombre de masse A, masse molaire atomique, éventuellement sa configuration électronique.
Cette fenêtre pourra alors se fermer lors de l'affichage d'un nouvel élément ou par un clic sur « fermer ».
Les utilisateurs visés par ce programme sont des élèves du lycée Saint-Paul IV et les professeurs de sciences. Le programme pourra donc être installé sur le réseau du lycée.
Un prolongement possible est de développer un programme équivalent en Javascript afin d'intégrer l'outil au site de la section numérique.



II. Côté code

Au tout début il a fallu cherché un fichier CSV contenant les informations qui nous intéressait (nous savions que cette ressource était trouvable sur internet), et se documenter sur le module Tkinter afin d'avoir toutes les connaissances nécessaires pour la construction du tableau et l'affichage des informations.

Le codage m'a posé deux problèmes majeurs, l'un au niveau de la construction du tableau et l'autre au niveau de la récupération et l'affichage des informations. En effet il existe un nombre incommensurable de façon de coder une même chose. Le défi à été de trouver la manière de coder la plus simple et la plus efficace possible, ainsi que de faire face à toutes les erreurs de codage ou encore les problèmes d'encodage du fichier CSV.


1. Le fichier CSV

Nous avons trouvé un fichier CSV regroupant différentes informations sur les éléments chimiques intéressant sur le site kemi.fr. Une fois trouvé, il a fallu réussir, au niveau du code, à récupérer les données souhaitées pour pouvoir les exploiter.
L'encodage du fichier CSV a posé problème. J'ai employé « -*- coding : utf-8 -*- » en début de code étant censé décoder les fichiers codés en utf-8, mais cela n'a pas marché. Seulement, je n'ai pas pu déterminer l'encodage précis du fichier CSV récupéré. Ainsi, afin de pouvoir utiliser celui-ci j'ai été forcée d'enlever tout les caractères spéciaux qu'il contenait.

Par la suite, j'ai supprimé les informations superflues pour le niveau des utilisateurs visés par ce programme après avoir pris conseils auprès de mes professeurs de physique- chimie. J'ai tout de même souhaité laisser les informations sur les dates et pays de découverte ainsi que les noms associés à la découverte dans le but de rendre le programme plus intéressant aux élèves. Enfin, j'ai ajouté l'information sur la masse molaire (en g/mol) qui était absente.

À un certain moment j'ai modifié le format du ficher CSV (basculement des colonnes en lignes) afin de rendre la récupération des informations plus simple, mais cela ne réglait pas les problèmes existants et ne permettait pas une bonne construction du tableau. Le fichier CSV a donc finalement gardé sa forme initiale.



Instructions Python pour le chargement des données du fichier csv dans une liste.





Extrait du fichier csv

Extrait du fichier csv contenant les informations du tableau de Mendeleïev.




2. La construction du tableau

Afin de nous familiariser avec la bibliothèque tkinter de Python et voir quel type de rendu visuel nous pourrions avoir, nous avons commencé par construire le tableau en créant les boutons un par un, et en les plaçant à l'aide de la méthode grid qui permet de choisir une colonne et une ligne (méthode la plus adéquate pour un tableau périodique).

Nous nous sommes aussi lancé dans l'élaboration de la fonction « faireApparaitreLeToplevel », fonction qui ouvre une fenêtre secondaire (ou fenêtre fille) lors du clique souris sur un bouton. Dès le début nous avions donc un programme affichant un tableau périodique qui ouvrait une fenêtre secondaire lors de l'appui sur un bouton.

Nous avons donc successivement construis :

• un tableau où les boutons sont codés un par un,

• un tableau où les boutons se forment par famille à l'aide d'une boucle for et dont la position (ligne et colonne) est récupérée dans le fichier CSV,

• un tableau où les boutons se crées en fonction des données -lignes- et -colonnes- récupérées dans le fichier CSV, et dont la fonction attribuée (faireApparaitreLeToplevel) prend en argument le numéro atomique (Z) et la couleur en hexadécimal (aussi récupérés dans le fichier CSV).


Instructions Python pour la création du tableau de boutons.






2. Tkinter et la gestion des évènements.

Nous avons rencontré quelques difficultés pour la récupération des données du fichier CSV. Nous avons compris ensuite qu'il était plus simple et plus judicieux de mettre les données du fichier CSV dans une liste vide créée au niveau du code (devenant alors un tableau de données), et d'aller les récupérer en second lieu dans celui-ci. Nous avons aussi rencontré quelques problèmes avec l'affichage dans la fenêtre graphique secondaire :
la fonction "faireApparraitreLeToplevel" a évolué en même temps que les méthodes de récupération des données du fichier CSV et de la construction du tableau.
Dans sa dernière version, celle-ci prend en argument x = le numéro atomique (Z) récupéré dans le tableau de données, et colour = la couleur en hexadécimal récupérée dans le même tableau. La fenêtre fille contient un cadre (Frame) de dimension donné. Ce cadre contient lui même deux listbox, l'un pour la légende et l'autre pour les informations de l'élément sélectionné. Ces listbox sont de dimensions variables en fonction de la taille du texte à afficher. À cette fenêtre est associé un bouton « quitter » ayant pour fonction "destroy" permettant sa fermeture.
Or, nous n'avons pas réussi à faire en sorte que la taille du cadre et de la fenêtre fille se règlent pour les listbox, c'est à dire en fonction de la taille des informations à afficher. Cela a posé un problème esthétique : la taille du cadre peut être réglée pour rendre visible les informations du Plutonium (élément possédant le plus d'information à afficher), mais cela à comme conséquence une fenêtre beaucoup plus large que nécessaire pour les éléments possédant moins d'informations à afficher.

Par conséquent nous avons pris la décision d'afficher les informations directement dans la fenêtre principale, au dessus du tableau, pour éviter ces désagréments esthétiques. J'ai alors créé la fonction « AffichageDesInformations » prenant en argument de la même façon, x = le numéro atomique (Z) récupéré dans le tableau de données, et colour = la couleur en hexadécimal récupérée dans le même tableau. Cette fonction, plus courte que la précédente, fait correspondre à l'aide de la fonction enumerate de Python, chaque légende contenue dans la liste «tableLegende», aux informations de l'élément chimique récupérées dans le tableau de données. Ensuite, la fonction affiche la légende et les informations dans la fenêtre principale à la place du message « Cliquez sur un élément pour afficher ses informations ».
À cette version de l'affichage est associé un bouton « effacer », situé en dessous du tableau, permettant de ré-afficher le message d'information aux utilisateurs.



Fonction Python permettant l'affichage des informations d'un élément.





Exemple d'affichage des données d'un élément

Exemple d'affichage des données d'un élément.


III. Les codes sources à télécharger.

1. Vous ne disposez pas de Python

Si vous ne disposez pas de Python installé sur votre ordinateur c'est donc que vous êtes sous Windows ;-)

Dans ce cas, pas de souci, nous vous proposons de télécharger le dossier zippé contenant un exécutable (.exe) permettant d'utiliser le programme sans Python.


Télécharger le dossier zippé contenant l'exécutable

2. Vous disposez de Python

Si vous disposez de Python installé sur votre ordinateur c'est donc que vous êtes sous Windows mais que vous avez installé Python ou que vous êtes sous OSX ou linux, systèmes sur lequels Python est déjà installé. Il est à noter que le code a été développé avec Python3.

Dans ce cas nous vous proposons de télécharger le dossier zippé contenant le fichier Python, et les fichiers connexes c'est à dire l'image du logo de la section numérique et le fichier csv contenant les données du tableau de Mendeleïev.


Télécharger le dossier zippé contenant le fichier Python et les fichiers secondaires




Banderolle de la Section Numérique du Lycée Saint-Paul IV
www.000webhost.com