# Chargement du module tkinter
from tkinter import * # pour Python2 ce serait Tkinter


######Chiffres significatifs

cs = 3 #indiquer ici le nombre de chiffres significatifs à utiliser pour l'affichage dans le tableau
cs = cs = "#." + str(cs) + "g" #permet d'afficher les nombres avec le bon nombre de chiffres significatifs dans le tableau, avec l'instruction format(nombre, cs)

#Pour présenter correctement les formules des espèces chimique (indice et exposant, on a utilisé les codes unicode : https://fr.wikipedia.org/wiki/Exposants_et_indices_Unicode
######Réactif 1

formuleR1 = 'I\u2082' #ici la formule du premièr réactif est I2 (\u2082 est le code unicode de 2 en position indice
coefStoechioR1 = 1


#Si le réactif 1 est une espèce dissoute indiquer sa concentration et le volume de la solution utilisée
#concentration du réactif 1 dans la solution utilisée en mol/L
c1 = 0 #mettre 0 si le réactif 1 n'est pas une espèce dissoute en solution
#Volume de la solution contenant le réactif 1 (diiode ou autre si une autre réaction) utilisée en mL
V1 = 10

#Si le réactif 1 est un solide indiquer sa masse et sa masse molaire
#concentration du réactif 1 dans la solution utilisée en mol/L
m1 = 3 #mettre 0 si le réactif 1 n'est pas un solide
#masse molaire du réactif 1 (diiode ou autre si une autre réaction) utilisée en g
M1 = 150
if c1 != 0 :
    nR1i = ... #A FAIRE : compléter par la formule permettant de calculer la quantite initiale du réactif 1, si c'est une espèce dissoute en solution  rq : si la concentration est en mol/L et le volume en mL, la quantité de matière sera en mmol
else :
    nR1i = ...  #A FAIRE : compléter par la formule permettant de calculer la quantite initiale du réactif 2, si c'est un solide  (ATTENTION, la masse sera en g, la masse molaire en g/mol, mais on veut la quantité de matière en mmol)
    
    
######Réactif 2

formuleR2 = 'S\u2082O\u2083 \u00B2\u207B' #ici la formule du deuxièmer réactif est S2O3 2- (voir code unicode pour les indices et exposants
coefStoechioR2 = 2


#Si le réactif 2 est une espèce dissoute indiquer sa concentration et le volume de la solution utilisée
#concentration du réactif 2 dans la solution utilisée en mol/L
c2 = 50 #mettre 0 si le réactif 2 n'est pas une espèce dissoute en solution
#Volume de la solution contenant le réactif 2 (thiosulfate ou autre si une autre réaction) utilisée en mL
V2 = 10

#Si le réactif 1 est un solide indiquer sa masse et sa masse molaire
#concentration du réactif 1 dans la solution utilisée en mol/L
m2 = 3 #mettre 0 si le réactif 1 n'est pas un solide
#masse molaire du réactif 1 (diiode ou autre si une autre réaction) utilisée en g
M2 = 150
if c2 != 0 :
    nR2i = ...  #A FAIRE : compléter par la formule permettant de calculer la quantite initiale du réactif 2, si c'est une espèce dissoute en solution  rq : si la concentration est en mol/L et le volume en mL, la quantité de matière sera en mmol
else :
    nR2i = ... #A FAIRE : compléter par la formule permettant de calculer la quantite initiale du réactif 2, si c'est un solide  (ATTENTION, la masse sera en g, la masse molaire en g/mol, mais on veut la quantité de matière en mmol)
    
######Produit 1

formuleP1 = 'I\u207B' #ici la formule du deuxième produit est I - (voir code unicode pour les indices et exposants
coefStoechioP1 = 2

nP1i = 0

######Produit 2

formuleP2 = 'S\u2084O\u2086 \u00B2\u207B' #ici la formule du deuxièmer produit est S4O6 2- (voir code unicode pour les indices et exposants
coefStoechioP2 = 1 


nP2i = 0

######Détermination de xmax
xmax = min (... ,...)

######Quantités finales
nR1f = ... #A FAIRE : compléter par la formule permettant de calculer la quantite finale du réactif 1  en fonction de nR1i et xmax
nR2f = ...  #A FAIRE : compléter par la formule permettant de calculer la quantite finale du réactif 2  en fonction de n2i et xmax
nP1f = ...  #A FAIRE : compléter par la formule permettant de calculer la quantite finale du produit 1  en fonction de n3i et xmax
nP2f = ... #A FAIRE : compléter par la formule permettant de calculer la quantite finale du produit 2  en fonction de n4i et xmax

###### Tracé du tableau
# Construction de la fenêtre principale «root»
root = Tk()
root.title('''Tableau d'avancement''')




#première ligne
Label(root, text='Equation de réaction',bd = 1,relief = 'solid').grid(row=0, column=0, columnspan=2,sticky='nesw' )
equation = Frame(root,bd = 1,relief = 'solid')
equation.grid(row=0, column=2,sticky='nesw')
equation.columnconfigure(0, minsize =40)
equation.columnconfigure(1, minsize =60)
equation.columnconfigure(2, minsize =20)
equation.columnconfigure(3, minsize =40)
equation.columnconfigure(4, minsize =60)
equation.columnconfigure(5, minsize =20)
equation.columnconfigure(6, minsize =40)
equation.columnconfigure(7, minsize =60)
equation.columnconfigure(8, minsize =20)
equation.columnconfigure(9, minsize =40)
equation.columnconfigure(10, minsize =60)


Label(equation, text=coefStoechioR1).grid(row=0, column=0 )#coef R1
Label(equation, text=formuleR1).grid(row=0, column=1 )#réactif 1
Label(equation, text='+').grid(row=0, column=2 )#+
Label(equation, text=coefStoechioR2).grid(row=0, column=3 )#coef R2
Label(equation, text=formuleR2).grid(row=0, column=4 )#réactif 2
Label(equation, text='\u2192').grid(row=0, column=5 )#flèche
Label(equation, text=coefStoechioP1).grid(row=0, column=6 )#coef P1
Label(equation, text=formuleP1).grid(row=0, column=7 )#produit 1
Label(equation, text='+').grid(row=0, column=8 )#+
Label(equation, text=coefStoechioP2).grid(row=0, column=9 )#coef P2
Label(equation, text=formuleP2).grid(row=0, column=10 )#produit 2


#deuxième ligne
Label(root, text='Etat du système',bd = 1,relief = 'solid').grid(row=1, column=0,sticky='nesw' )
Label(root, text='Avancement en mmol',bd = 1,relief = 'solid').grid(row=1, column=1, sticky='nesw')
Label(root, text='Quantité de matière en mmol',bd = 1,relief = 'solid').grid(row=1, column=2, columnspan=7,sticky='nesw' )

##########ETAT INITIAL######
#troisiéme ligne 
Label(root, text='Etat initial',bd = 1,relief = 'solid').grid(row=2, column=0, sticky='nesw' )
Label(root, text='x = 0',bd = 1,relief = 'solid',).grid(row=2, column=1,sticky='nesw' )
qdmInitial = Frame(root)
qdmInitial.grid(row=2, column=2,sticky='nesw')
#pour poistionner correctement les 4 colonnes des quantités de matière
qdmInitial.columnconfigure(0, minsize =110)
qdmInitial.columnconfigure(1, minsize =120)
qdmInitial.columnconfigure(2, minsize =120)
qdmInitial.columnconfigure(3, minsize =110)
#Remplissage des colonnes : quantités de matière à l'état initial
Label(qdmInitial, text=format(nR1i, cs),bd = 1,relief = 'solid').grid(row=0, column=0, sticky='nesw' )#réactif 1
Label(qdmInitial, text=format(nR2i, cs),bd = 1,relief = 'solid').grid(row=0, column=1, sticky='nesw' )#réactif 2
Label(qdmInitial, text=format(nP1i, cs),bd = 1,relief = 'solid').grid(row=0, column=2, sticky='nesw' )#produit 1
Label(qdmInitial, text=format(nP2i, cs),bd = 1,relief = 'solid').grid(row=0, column=3 , sticky='nesw')#produit 2

##########EN COURS DE TRANSFORMATION######

#quatrième ligne 
Label(root, text='En cours de transformation',bd = 1,relief = 'solid').grid(row=3, column=0, sticky='nesw')
Label(root, text='x < xmax',bd = 1,relief = 'solid').grid(row=3, column=1, sticky='nesw')
qdmEncours = Frame(root)
qdmEncours.grid(row=3, column=2,sticky='nesw')
#pour poistionner correctement les 4 colonnes  des quantités de matière
qdmEncours.columnconfigure(0, minsize =110)
qdmEncours.columnconfigure(1, minsize =120)
qdmEncours.columnconfigure(2, minsize =120)
qdmEncours.columnconfigure(3, minsize =110)
#Remplissage des colonnes : quantités de matière en cours de transformation
Label(qdmEncours, text=format(nR1i, cs)+" - "+str(coefStoechioR1)+".x",bd = 1,relief = 'solid').grid(row=0, column=0, sticky='nesw' )#réactif 1
Label(qdmEncours, text=format(nR2i, cs)+" - "+str(coefStoechioR2)+".x",bd = 1,relief = 'solid').grid(row=0, column=1, sticky='nesw' )#réactif 2
Label(qdmEncours, text=format(nP1i, cs)+" + "+str(coefStoechioP1)+".x",bd = 1,relief = 'solid').grid(row=0, column=2, sticky='nesw' )#produit 1
Label(qdmEncours, text=format(nP2i, cs)+" + "+str(coefStoechioP2)+".x",bd = 1,relief = 'solid').grid(row=0, column=3, sticky='nesw' )#produit 2


##########ETAT FINAL######
#cinquième ligne
Label(root, text='Etat final',bd = 1,relief = 'solid').grid(row=4, column=0, sticky='nesw' )
Label(root, text='x = xmax = '+ str(xmax),bd = 1,relief = 'solid').grid(row=4, column=1, sticky='nesw')
qdmFinal = Frame(root)
qdmFinal.grid(row=4, column=2,sticky='nesw')
#pour poistionner correctement les 4 colonnes  des quantités de matière
qdmFinal.columnconfigure(0, minsize =110)
qdmFinal.columnconfigure(1, minsize =120)
qdmFinal.columnconfigure(2, minsize =120)
qdmFinal.columnconfigure(3, minsize =110)
#Remplissage des colonnes : quantités de matière à l'état final
Label(qdmFinal, text=format(nR1i, cs),bd = 1,relief = 'solid').grid(row=0, column=0, sticky='nesw' )#réactif 1
Label(qdmFinal, text=format(nR2i, cs),bd = 1,relief = 'solid').grid(row=0, column=1, sticky='nesw' )#réactif 2
Label(qdmFinal, text=format(nP1i, cs),bd = 1,relief = 'solid').grid(row=0, column=2, sticky='nesw' )#produit 1
Label(qdmFinal, text=format(nP2i, cs),bd = 1,relief = 'solid').grid(row=0, column=3, sticky='nesw' )#produit 2



# Lancement de la «boucle principale»
root.mainloop()