Skip to main content

Python : Réalisation du cube

Le programme suivant permet de réaliser rapidement un patron de cube pour la découpe laser. Il reste cependant avec cette version à placer les éléments et les changer en chemin.

import tkinter as tk     		#Sert à la création d'interfaces
from tkinter import messagebox
import os				#Pour les opérations relatives aux chemins et les emplacements des fichiers 
import matplotlib.pyplot as plt		#Pour les créations de grahiques
import shutil  				#Utilisé pour la copie et le déplacement de fichiers  
import xml.etree.ElementTree as ET	#Pour l'intéraction avec Inkscape
import base64
import numpy as np			#Bibliothèque mathématique


## liste des 118 éléments avec Numéro, Symbole, Noms en anglais, français, chinois, russe et espagnol. Les deux nombres ensuite sont les coordonnés dans le tableau.

elements = [
    (1, "H", ("Hydrogen","Hydrogène","氢","الهيدروجين","Водород","Hidrógeno"), 1, 1),
    (2, "He", ("Helium","Hélium","氦","الهيليوم","Гелий","Helio"), 18, 1),
    (3, "Li", ("Lithium","Lithium","锂","الليثيوم","Литий","Litio"), 1, 2),
    (4, "Be", ("Beryllium","Béryllium","铍","البريليوم","Бериллий","Berilio"), 2, 2),
    (5, "B", ("Boron","Bore","硼","البورون","Бор","Boro"), 13, 2),
    (6, "C", ("Carbon","Carbone","碳","الكربون","Углерод","Carbono"), 14, 2),
    (7, "N", ("Nitrogen","Azote","氮","النيتروجين","Азот","Nitrógeno"), 15, 2),
    (8, "O", ("Oxygen","Oxygène","氧","الأكسجين","Кислород","Oxígeno"), 16, 2),
    (9, "F", ("Fluorine","Fluor","氟","الفلور","Фтор","Flúor"), 17, 2),
    (10, "Ne", ("Neon","Néon","氖","النيون","Неон","Neón"), 18, 2),
    (11, "Na", ("Sodium","Sodium","钠","الصوديوم","Натрий","Sodio"), 1, 3),
    (12, "Mg", ("Magnesium","Magnésium","镁","المغنيسيوم","Магний","Magnesio"), 2, 3),
    (13, "Al", ("Aluminum","Aluminium","铝","الألومنيوم","Алюминий","Aluminio"), 13, 3),
    (14, "Si", ("Silicon","Silicium","硅","السيليكون","Кремний","Silicio"), 14, 3),
    (15, "P", ("Phosphorus","Phosphore","磷","الفوسفور","Фосфор","Fósforo"), 15, 3),
    (16, "S", ("Sulfur","Soufre","硫","الكبريت","Сера","Azufre"), 16, 3),
    (17, "Cl", ("Chlorine","Chlore","氯","الكلور","Хлор","Cloro"), 17, 3),
    (18, "Ar", ("Argon","Argon","氩","الأرجون","Аргон","Argón"), 18, 3),
    (19, "K", ("Potassium","Potassium","钾","البوتاسيوم","Калий","Potasio"), 1, 4),
    (20, "Ca", ("Calcium","Calcium","钙","الكالسيوم","Кальций","Calcio"), 2, 4),
    (21, "Sc", ("Scandium","Scandium","钪","الإسكنديوم","Скандий","Escandio"), 3, 4),
    (22, "Ti", ("Titanium","Titane","钛","التيتانيوم","Титан","Titanio"), 4, 4),
    (23, "V", ("Vanadium","Vanadium","钒","الفاناديوم","Ванадий","Vanadio"), 5, 4),
    (24, "Cr", ("Chromium","Chrome","铬","الكروم","Хром","Cromo"), 6, 4),
    (25, "Mn", ("Manganese","Manganèse","锰","المنغنيز","Марганец","Manganeso"), 7, 4),
    (26, "Fe", ("Iron","Fer","铁","الحديد","Железо","Hierro"), 8, 4),
    (27, "Co", ("Cobalt","Cobalt","钴","الكوبالت","Кобальт","Cobalto"), 9, 4),
    (28, "Ni", ("Nickel","Nickel","镍","النيكل","Никель","Níquel"), 10, 4),
    (29, "Cu", ("Copper","Cuivre","铜","النحاس","Медь","Cobre"), 11, 4),
    (30, "Zn", ("Zinc","Zinc","锌","الزنك","Цинк","Zinc"), 12, 4),
    (31, "Ga", ("Gallium","Gallium","镓","الغاليوم","Галлий","Galio"), 13, 4),
    (32, "Ge", ("Germanium","Germanium","锗","الجرمانيوم","Германий","Germanio"), 14, 4),
    (33, "As", ("Arsenic","Arsenic","砷","الزرنيخ","Мышьяк","Arsénico"), 15, 4),
    (34, "Se", ("Selenium","Sélénium","硒","السيلينيوم","Селен","Selenio"), 16, 4),
    (35, "Br", ("Bromine","Brome","溴","البروم","Бром","Bromo"), 17, 4),
    (36, "Kr", ("Krypton","Krypton","氪","الكريبتون","Криптон","Kriptón"), 18, 4),
    (37, "Rb", ("Rubidium","Rubidium","铷","الروبيديوم","Рубидий","Rubidio"), 1, 5),
    (38, "Sr", ("Strontium","Strontium","锶","السترونشيوم","Стронций","Estroncio"), 2, 5),
    (39, "Y", ("Yttrium","Yttrium","钇","الإيتريوم","Иттрий","Itrio"), 3, 5),
    (40, "Zr", ("Zirconium","Zirconium","锆","الزركونيوم","Цирконий","Circonio"), 4, 5),
    (41, "Nb", ("Niobium","Niobium","铌","النيوبيوم","Ниобий","Niobio"), 5, 5),
    (42, "Mo", ("Molybdenum","Molybdène","钼","الموليبدينوم","Молибден","Molibdeno"), 6, 5),
    (43, "Tc", ("Technetium","Technétium","锝","التكنيتيوم","Технеций","Tecnecio"), 7, 5),
    (44, "Ru", ("Ruthenium","Ruthénium","钌","الروثينيوم","Рутений","Rutenio"), 8, 5),
    (45, "Rh", ("Rhodium","Rhodium","铑","الروديوم","Родий","Rodio"), 9, 5),
    (46, "Pd", ("Palladium","Palladium","钯","البلاديوم","Палладий","Paladio"), 10, 5),
    (47, "Ag", ("Silver","Argent","银","الفضة","Серебро","Plata"), 11, 5),
    (48, "Cd", ("Cadmium","Cadmium","镉","الكادميوم","Кадмий","Cadmio"), 12, 5),
    (49, "In", ("Indium","Indium","铟","الإنديوم","Индий","Indio"), 13, 5),
    (50, "Sn", ("Tin","Étain","锡","القصدير","Олово","Estaño"), 14, 5),
    (51, "Sb", ("Antimony","Antimoine","锑","الأنتيمون","Сурьма","Antimonio"), 15, 5),
    (52, "Te", ("Tellurium","Tellure","碲","التيلوريوم","Теллур","Telurio"), 16, 5),
    (53, "I", ("Iodine","Iode","碘","اليود","Йод","Yodo"), 17, 5),
    (54, "Xe", ("Xenon","Xénon","氙","الزينون","Ксенон","Xenón"), 18, 5),
    (55, "Cs", ("Cesium","Césium","铯","السيزيوم","Цезий","Cesio"), 1, 6),
    (56, "Ba", ("Barium","Baryum","钡","الباريوم","Барий","Bario"), 2, 6),
    # Lanthanides
    (57, "La", ("Lanthanum","Lanthane","镧","اللانثانوم","Лантан","Lantano"), 3, 9),
    (58, "Ce", ("Cerium","Cérium","铈","السيريوم","Церий","Cerio"), 4, 9),
    (59, "Pr", ("Praseodymium","Praséodyme","镨","البراسيوديميوم","Празеодим","Praseodimio"), 5, 9),
    (60, "Nd", ("Neodymium","Néodyme","钕","النيوديميوم","Неодим","Neodimio"), 6, 9),
    (61, "Pm", ("Promethium","Prométhium","钷","البروميثيوم","Прометий","Prometio"), 7, 9),
    (62, "Sm", ("Samarium","Samarium","钐","الساماريوم","Самарий","Samario"), 8, 9),
    (63, "Eu", ("Europium","Europium","铕","اليوروبيوم","Европий","Europio"), 9, 9),
    (64, "Gd", ("Gadolinium","Gadolinium","钆","الغادولينيوم","Гадолиний","Gadolinio"), 10, 9),
    (65, "Tb", ("Terbium","Terbium","铽","التيربيوم","Тербий","Terbio"), 11, 9),
    (66, "Dy", ("Dysprosium","Dysprosium","镝","الديسبروسيوم","Диспрозий","Disprosio"), 12, 9),
    (67, "Ho", ("Holmium","Holmium","钬","الهولميوم","Гольмий","Holmio"), 13, 9),
    (68, "Er", ("Erbium","Erbium","铒","الإربيوم","Эрбий","Erbio"), 14, 9),
    (69, "Tm", ("Thulium","Thulium","铥","الثوليوم","Туллий","Tulio"), 15, 9),
    (70, "Yb", ("Ytterbium","Ytterbium","镱","الإيتربيوم","Иттербий","Iterbio"), 16, 9),
    (71, "Lu", ("Lutetium","Lutécium","镥","اللوتيتيوم","Лютеций","Lutecio"), 17, 9),

    (72, "Hf", ("Hafnium","Hafnium","铪","الهافنيوم","Гафний","Hafnio"), 4, 6),
    (73, "Ta", ("Tantalum","Tantale","钽","التنتالوم","Тантал","Tantalio"), 5, 6),
    (74, "W", ("Tungsten","Tungstène","钨","التنغستن","Вольфрам","Wolframio"), 6, 6),
    (75, "Re", ("Rhenium","Rhénium","铼","الرينيوم","Рений","Renio"), 7, 6),
    (76, "Os", ("Osmium","Osmium","锇","الأوزميوم","Осмий","Osmio"), 8, 6),
    (77, "Ir", ("Iridium","Iridium","铱","الإيريديوم","Иридий","Iridio"), 9, 6),
    (78, "Pt", ("Platinum","Platine","铂","البلاتين","Платина","Platino"), 10, 6),
    (79, "Au", ("Gold","Or","金","الذهب","Золото","Oro"), 11, 6),
    (80, "Hg", ("Mercury","Mercure","汞","الزئبق","Ртуть","Mercurio"), 12, 6),
    (81, "Tl", ("Thallium","Thallium","铊","الثاليوم","Таллий","Talio"), 13, 6),
    (82, "Pb", ("Lead","Plomb","铅","الرصاص","Свинец","Plomo"), 14, 6),
    (83, "Bi", ("Bismuth","Bismuth","铋","البزموت","Висмут","Bismuto"), 15, 6),
    (84, "Po", ("Polonium","Polonium","钋","البولونيوم","Полоний","Polonio"), 16, 6),
    (85, "At", ("Astatine","Astate","砹","الأستاتين","Астат","Astato"), 17, 6),
    (86, "Rn", ("Radon","Radon","氡","الرادون","Радон","Radón"), 18, 6),

    (87, "Fr", ("Francium","Francium","钫","الفرانسيوم","Франций","Francio"), 1, 7),
    (88, "Ra", ("Radium","Radium","镭","الراديوم","Радий","Radio"), 2, 7),

    # Actinides
    (89, "Ac", ("Actinium","Actinium","锕","الأكتينيوم","Актиний","Actinio"), 3, 10),
    (90, "Th", ("Thorium","Thorium","钍","الثوريوم","Торий","Torio"), 4, 10),
    (91, "Pa", ("Protactinium","Protactinium","镤","البروتاكتينيوم","Протактиний","Protactinio"), 5, 10),
    (92, "U", ("Uranium","Uranium","铀","اليورانيوم","Уран","Uranio"), 6, 10),
    (93, "Np", ("Neptunium","Neptunium","镎","النيبتونيوم","Нептуний","Neptunio"), 7, 10),
    (94, "Pu", ("Plutonium","Plutonium","钚","البلوتونيوم","Плутоний","Plutonio"), 8, 10),
    (95, "Am", ("Americium","Américium","镅","الأميريكيوم","Америций","Americio"), 9, 10),
    (96, "Cm", ("Curium","Curium","锔","الكوريوم","Кюрий","Curio"), 10, 10),
    (97, "Bk", ("Berkelium","Berkelium","锫","البركيليوم","Берклий","Berkelio"), 11, 10),
    (98, "Cf", ("Californium","Californium","锎","الكاليفورنيوم","Калифорний","Californio"), 12, 10),
    (99, "Es", ("Einsteinium","Einsteinium","锿","الآينشتينيوم","Эйнштейний","Einsteinio"), 13, 10),
    (100, "Fm", ("Fermium","Fermium","镄","الفرميوم","Фермий","Fermio"), 14, 10),
    (101, "Md", ("Mendelevium","Mendélévium","钔","المندليفيوم","Менделевий","Mendelevio"), 15, 10),
    (102, "No", ("Nobelium","Nobélium","锘","النوبليوم","Нобелий","Nobelio"), 16, 10),
    (103, "Lr", ("Lawrencium","Lawrencium","铹","اللورنسيوم","Лоуренсий","Laurencio"), 17, 10),

    (104, "Rf", ("Rutherfordium","Rutherfordium","𬬭","الرذرفورديوم","Резерфордий","Rutherfordio"), 4, 7),
    (105, "Db", ("Dubnium","Dubnium","𬭊","الدوبنيوم","Дубний","Dubnio"), 5, 7),
    (106, "Sg", ("Seaborgium","Seaborgium","𬭳","السيبورغيوم","Сиборгий","Seaborgio"), 6, 7),
    (107, "Bh", ("Bohrium","Bohrium","𬭛","البوهريوم","Борий","Bohrio"), 7, 7),
    (108, "Hs", ("Hassium","Hassium","𬭶","الهسيوم","Хассий","Hassio"), 8, 7),
    (109, "Mt", ("Meitnerium","Meitnerium","𬭸","الميتنيريوم","Мейтнерий","Meitnerio"), 9, 7),
    (110, "Ds", ("Darmstadtium","Darmstadtium","𬭼","دارمشتاتيوم","Дармштадтий","Darmstadtio"), 10, 7),
    (111, "Rg", ("Roentgenium","Roentgenium","𬭩","الرونتجينيوم","Рентгений","Roentgenio"), 11, 7),
    (112, "Cn", ("Copernicium","Copernicium","𬭳","الكوبرنيسيوم","Коперниций","Copernicio"), 12, 7),
    (113, "Nh", ("Nihonium","Nihonium","𬭭","النيهونيوم","Нихоний","Nihonio"), 13, 7),
    (114, "Fl", ("Flerovium","Flérovium","𬭫","الفليروفيوم","Флеровий","Flerovio"), 14, 7),
    (115, "Mc", ("Moscovium","Moscovium","𬭬","الموسكوفيوم","Московий","Moscovio"), 15, 7),
    (116, "Lv", ("Livermorium","Livermorium","𬭳","الليفرموريوم","Ливерморий","Livermorio"), 16, 7),
    (117, "Ts", ("Tennessine","Tennessine","𬭸","التينيسين","Теннессин","Tenesino"), 17, 7),
    (118, "Og", ("Oganesson","Oganesson","𬭛","الأوجانيسون","Оганессон","Oganesón"), 18, 7)
]



## Donne la configuration électronique en fonction du nombre d'électron Z donné.
			
def Config(Z):
	
	orbitales = ["1s", "2s", "2p", "3s", "3p", "4s","3d", "4p", "5s", "4d", "5p", "6s","4f", "5d", "6p", "7s", "5f", "6d", "7p"]
    
	max_elec = {"s": 2,"p": 6,"d": 10,"f": 14}  #nombre max d'électrons par couche 
    
	config = []
	reste = Z
    
	for orb in orbitales:			#Parcourt la liste des orbitales 
		l = orb[-1]  			#Identifie le type de sous-couche: s, p, d, f
		n = min(max_elec[l], reste)	#Compte le nombre d'électrons dans la sous-couche
		config.append([f"{orb}",n])	#Sauvegarge dans la liste config de l'orbitale te de son remplissage
		reste -= n			#Retire le nombre d'électrons ajoutés à la sous-couche
		if reste <= 0:			#Fin du parcourt des orbitales quand il n'y a plus d'électrons à répartir
			break
    
	print('Configuration électronique :',config)  #Affiche les résultats de configuration
	return config  				#Renvoie les résultats de configuration sous forme de liste


## Trace le modèle de Borh d'un atome, avec son nom et son symbole, à but illustratif

def traceur1(Z,name,symbol) :
	orbits = Config(Z)  			#Fait appel à la fonction Config() et stocke le résultat dans la variable orbits
	population = [0 for i in range(7)]	#Crée une liste de 0 (Longueur de 7) (les couches de 1 à 7)
	for orb in orbits : 			#Parcourt la liste orbits 
		n = int(orb[0][0])		#Lit la couche orbitale "1" dans la notation "1s" par exemple 
		population[n-1]+=orb[1]		#Ajoute le nombre d'électrons dans la coche correspondante
	print('Population :',population)	#Affiche la répartition de population par couche 
	
	fig, ax = plt.subplots()		#Création du graphique 
	rayons=np.linspace(1,7,7,dtype=int)	#Création d'une liste de 7 valeurs (pour les rayons des cercles)

	for r, n_e in zip(rayons, population):	#Parcourt les couches de 1 à 7 et la liste des rayons en même temps
		if n_e!=0 :			#Ne trace le cercle que si le nombre d'électrons est supérireur à 0
    	
			cercle = plt.Circle((0, 0), r, fill=False) 	#Créé un cercle de rayon r et de centre 0,0
			ax.add_patch(cercle)				#Ajoute le cercle sur le graphe 

    
			angles = np.linspace(0, 2*np.pi, n_e, endpoint=False)		#Calcule les angles pour répartir les n électrons de la couche sur le cercle
			x = r * np.cos(angles)				#Ces deux lignes placent les électrons sur les cercles
			y = r * np.sin(angles)

			ax.scatter(x, y, s=50)  # s=taille du point


	nucleus = plt.Circle((0, 0), 0.2, color=(0,0,1))	#Crée le noyau
	ax.add_patch(nucleus)					#Ajoute le noyau

	ax.set_aspect('equal', 'box')				#Fait une boite carrée pour l'affichage du graphique 
	ax.set_xlim(-max(rayons)-1, max(rayons)+1)		#Fixe les limites de l'axe x 
	ax.set_ylim(-max(rayons)-1, max(rayons)+1)		#Fixe les limites de l'axe y
	ax.set_xticks([])					#Enlève les graduations de l'axe x
	ax.set_yticks([])					#Enlève les graduations de l'axe x
	plt.title(f"Modèle de Bohr - {name} ({symbol})")	#Titre

	plt.show(block=False)					#Affiche le graphique dans une nouvelle fenêtre et ne bloque pas la suite de l'execution su programme 


## Trace le modèle de Borh d'un atome, et l'enregistre en png dans le dossier actif

def traceur2(Z,name) :
	orbits = Config(Z)
	population = [0 for i in range(7)]
	for orb in orbits : 
		n = int(orb[0][0])
		population[n-1]+=orb[1]	
	fig, ax = plt.subplots()
	rayons=np.linspace(1,7,7,dtype=int)

	for r, n_e in zip(rayons, population):
		if n_e!=0 :
    	
			cercle = plt.Circle((0, 0), r, fill=False)
			ax.add_patch(cercle)

    
			angles = np.linspace(0, 2*np.pi, n_e, endpoint=False)
			x = r * np.cos(angles)
			y = r * np.sin(angles)

			ax.scatter(x, y, s=50)  # s=taille du point


	nucleus = plt.Circle((0, 0), 0.2, color=(0,0,1))
	ax.add_patch(nucleus)

	ax.set_aspect('equal', 'box')
	plt.axis('off')					#Enlève les axes
	ax.set_xlim(-max(rayons)-1, max(rayons)+1)
	ax.set_ylim(-max(rayons)-1, max(rayons)+1)
	ax.set_xticks([])
	ax.set_yticks([])

	plt.savefig(f'orb_{name}')			#Sauvegarde la figure sous le nom 'orb_[nom de l'atome]'
	plt.close()					#Ferme la figure après l'enregistrement
	
	



class PeriodicTableApp:					#Création d'un objet 
	def __init__(self, master):			#Fonction qui se lance automatiquement lors de la création de l'objet
		self.master = master			#Permet de combiner la fenêtre tkinter à l'objet
		self.last_clicked = None  		#Création d'une variable pour stocker le dernier click effectué

		for (num, sym, name, col, row) in elements: 		#Parcourt la liste des éléments 
			btn = tk.Button(master, text=sym, width=5, height=2,
			command=lambda s=sym: self.on_click(s))		#Paramètres d'affichage du bouton
			btn.grid(row=row, column=col)			#Grille des boutons avec les coordonnées 

	def on_click(self, symbol):			#Fonction qui s'active lors d'un click sur un bouton
		name=''					#Crée une variable string vide
		self.last_clicked = symbol		#Stocke le symbole dans la variable 
		print("Clic sur :", symbol)		#Affiche dans le terminal l'élément clické (symbol)
		for i in range(len(elements)) :							#Parcourt la liste d'éléments 
			if symbol in elements[i] and len(symbol)==len(elements[i][1]) :		#Cherche le symbole clické dans la liste 
				name = elements[i][2][1]					#Récupère le nom
				print(name)							#Affiche le nom
		reponse = messagebox.askokcancel("Gravure de l'élement", f"Clic sur {name} ({symbol}), Faire un fichier ?") 	#Ouvre une fenêtre pour demander confirmation
		if reponse is True :												#En cas de réponse positive
			os.makedirs(f"{symbol}_box", exist_ok=True)				#Créé un dossier dans le dossier actif en fonction du symbole

#Les lignes suivantes servent à copier un teplate .svg dans le dossier récement crée. Il convient de modifier les chemins comme necessaire.

			os.chdir(f"C:/Users/uilisateur/Desktop/SC_HM/prog/{symbol}_box")		#Change le dossier actif à celui designé (celui de l'élément)
#			os.chdir(f"D:/fbalba/prog/{symbol}_box")
			src=f"C:/Users/uilisateur/Desktop/SC_HM/prog/BasedBox15mm.svg"			#Création de stings avec des emplacements de fichiers
#			src=f"D:/fbalba/prog/BasedBox15mm.svg"
			dst=f"C:/Users/uilisateur/Desktop/SC_HM/prog/{symbol}_box/{symbol}_box.svg"	
#			dst=f"D:/fbalba/prog/{symbol}_box/{symbol}_box.svg"

			shutil.copy(src,dst)		#Commande pour copier le fichier choisi dans le nouvel emplacement
			
			for i in range(len(elements)):							#Parcourt la liste des éléments 
				if symbol in elements[i] and len(symbol)==len(elements[i][1]) :		#Cherche le symbole clické dans la liste 
					traceur1(elements[i][0],elements[i][2][1],elements[i][1])	#Execute les fonctions traceur avec les bons arguments
					traceur2(elements[i][0],elements[i][2][1])			

			tree = ET.parse(f"{symbol}_box.svg")		#Charge un fichier .svg et permet de travailler avec en python
			root = tree.getroot()				#Necessaire pour modifier le fichier
			ns = {"svg": "http://www.w3.org/2000/svg"}	#ns=Namespace : Dictionnaire qui contient des spcéciations concernant les .svg
			ET.register_namespace("", ns["svg"])		#Permet au code d'utiliser le namespace

			for i in range(len(elements)):			
				if symbol in elements[i] and len(symbol)==len(elements[i][1]) :
					if len(elements[i][1])==1 :						#Change la taille de police selon la longueur du symbole
						symb = ET.Element("{http://www.w3.org/2000/svg}text", {		#Mise en forme du texte voulu, ici le symbole
    							"x": "100",          # X position
    							"y": "150",          # Y position
   							"font-size": "20",
							"font-family": "Bauhaus 93",
    							"fill": "black",
    							"text-anchor": "middle"
											})
						symb.text = f"{elements[i][1]}"
						root.append(symb)
					else :
						symb = ET.Element("{http://www.w3.org/2000/svg}text", {
    							"x": "100",          # X position
    							"y": "150",          # Y position
   							"font-size": "16",
							"font-family": "Bauhaus 93",
    							"fill": "black",
    							"text-anchor": "middle"
											})
						symb.text = f"{elements[i][1]}"
						root.append(symb)

					for j in range(len(elements[i][2])):				#Ajoute les noms dans les différentes langues
						ypos=150+10*j
						text = ET.Element("{http://www.w3.org/2000/svg}text", {
    							"x": "80",          # X position
    							"y": str(ypos),          # Y position
   							"font-size": "10",
							"font-family": "Bauhaus 93",
							"font-weight": "bold",
    							"fill": "black",
    							"text-anchor": "middle"
											})
						text.text = f"{elements[i][2][j]}"
						root.append(text)

					num=ET.Element("{http://www.w3.org/2000/svg}text", {		#Ajoute le numéro atomique
    							"x": "130",          
    							"y": "150",          
   							"font-size": "20",
							"font-family": "Bauhaus 93",
    							"fill": "black",
    							"text-anchor": "middle"
											})
					num.text = f"{elements[i][0]}"
					root.append(num)

					number=ET.Element("{http://www.w3.org/2000/svg}text", {		#Ajoute le mot "Number"
    							"x": "130",          
    							"y": "125",          
   							"font-size": "10",
							"font-family": "Bauhaus 93",
    							"fill": "black",
    							"text-anchor": "middle"
											})
					number.text = "Number"
					root.append(number)
					
					with open(f"orb_{name}.png", "rb") as f:			#Ajoute le modèle de Bohr enregistré dans le dossier actif
						orb_data = f.read()
					encoded_orb = base64.b64encode(orb_data).decode("utf-8")
					orb = ET.Element("{http://www.w3.org/2000/svg}image", {
    							"x": "50",                
    							"y": "50",                
    							"width": "200",           
    							"height": "200",          
    							"href": f"data:image/png;base64,{encoded_orb}"
												})
					root.append(orb)
				
					watermark=ET.Element("{http://www.w3.org/2000/svg}text", {	#Ajoute le texte "Fait avec Python"
    							"x": "130",          
    							"y": "125",          
   							"font-size": "10",
							"font-family": "Bauhaus 93",
    							"fill": "black",
    							"text-anchor": "middle"
											})
					watermark.text = "Fait avec Python"
					root.append(watermark)
				
			tree.write(f"{symbol}_box.svg", encoding="utf-8", xml_declaration=True)
					

		os.chdir(f"C:/Users/uilisateur/Desktop/SC_HM/prog")		#Remet le dossier parent comme actif
#		os.chdir(f"D:/fbalba/prog")
		if reponse is True :
			os.startfile(f"C:/Users/uilisateur/Desktop/SC_HM/prog/{symbol}_box/{symbol}_box.svg")	#Ouvre le fichier .svg qui vient d'être modifié
#			os.startfile(f"D:/fbalba/prog/{symbol}_box/{symbol}_box.svg")

		

root = tk.Tk()				#Permet de créer la fenêtre
root.title("Tableau Périodique")	#Nom de la fenêtre 
app = PeriodicTableApp(root)		#Permet à l'objet PeriodicTableApp de s'afficher dans la fenêtre 
root.mainloop()				#Fait fonctionner la fenêtre jusqu'à sa fermeture

print("Valeur finale :", app.last_clicked)  #Affiche la denière case clickée lors de la fermeture