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
No Comments