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.
Le template (en pièce jointe) pour le cube est un fichier .svg à placer dans le dossier contenant le programme. Il est tout à fait possible de copier coller le programme dans un fichier .py.
Pour le faire tourner, un double-clic sur le fichier fonctionne pour sûr avec Windows 10 et 11. Personnellement, j'utilise le powershell, accessible à partir du fichier actif en tapant powershell dans la barre horizontale au dessus du contenu du dossier.
"Notepad [nom du fichier].py" permet d'ouvrir un fichier .py dans le bloc-notes (comme un fichier texte) pour le modifier.
"Python [nom du fichier].py" permet d'utiliser le programme avec la version de python actuellement installée localement.
Pour les différentes bibliothèques, si elles ne sont pas installées localement, le programme ne s'exécute pas. Il faut donc les installer : "pip install [nom de la bilbiothèque]" permet de le faire.
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 du 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

No Comments