Outils pour utilisateurs

Outils du site


teaching:progappchim:ph_acides_bases_2013

Représentation de pH d'acides et de bases

Pour les acides :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# travail de QD et TB, ba2 chimie 2012-2013

import Tkinter as tk
from numpy import *
import matplotlib.pyplot as plt

def get_acide(event):
    """
    fonction pour lire la séléction dans la listbox
    et afficher le pKa correspondant
    """
    indexacide=listbox1.curselection()[0]
    seltextacide=listbox1.get(indexacide)
    listeacide= ['HClO4','HCl', 'HI', 'HNO3', 'H3O+', 'HF', 'HSO4-', 'HBr', 'HClO2', 'HNO2']
    listepka=[-8.6,-6,-10,-1.3,-1.74,3.2,1.9,-9,1.93,3.29]
    acideselect=listeacide.index(seltextacide)
    pkaselect=listepka[acideselect]
    label['text']=pkaselect

def graphe_acide () :
    """ foncton pour tracer le graphe
    du pH de l'acide sélectionné en
    fonction de sa concentration
    """
    
    indexacide=listbox1.curselection()[0]
    seltextacide=listbox1.get(indexacide)
    listeacide= ['HClO4','HCl', 'HI', 'HNO3', 'H3O+', 'HF', 'HSO4-', 'HBr', 'HClO2', 'HNO2']
    listepka=[-8.6,-6,-10,-1.3,-1.74,3.2,1.9,-9,1.93,3.29]
    acideselect=listeacide.index(seltextacide)
    pkaselect=listepka[acideselect]

    if pkaselect < 0:
        x=[0.0001,0.001,0.01,0.1,1]
        y=-log10(x)
        l1=plt.semilogx(x,y,color='m',linewidth=2)
        lx=plt.xlabel("Concentration")
        ly=plt.ylabel("pH")
        t1=plt.title("pH d'un acide fort en fonction de la concentration")
        plt.show()

    elif pkaselect > 0:
        x=[0.0001,0.001,0.01,0.1,1]
        y=0.5*(pkaselect)-0.5*log10(x)
        l1=plt.semilogx(x,y,color='#DAB30A',linewidth=2)
        lx=plt.xlabel("Concentration")
        ly=plt.ylabel("pH")
        t1=plt.title("pH d'un acide faible en fonction de la concentration")
        plt.show()
    

#on crée un sample de données pour la listbox
str1= """HClO4 
HCl 
HI 
HNO3 
H3O+ 
HF 
HSO4-          
HBr 
HClO2
HNO2"""

#va écrire un fichier .txt dans lequel on met le sample
#fout -->file output et fin --> file input sont des
#fonctions d'édition de fichiers. Ici, le w veut dire 'writing'
#et le r veut dire 'reading'
#si on mettait a, cela voudrait dire 'appending'
fin = open("chem_data_acide.txt", "w")
fin.write(str1)
fin.close()
 
#va lire le fichier .txt
fout = open("chem_data_acide.txt", "r")
chem_list = fout.readlines()
fout.close()

#rtstrip pour recopier les éléments de chem_list
c2=[chem for chem in chem_list]
chem_list = [chem.rstrip() for chem in chem_list]
print chem_list
print c2
#crée la fenêtre Tk
root = tk.Tk()
root.title("Graphique Acide")

#crée la listbox
listbox1 = tk.Listbox(root, width=35, height=6)
listbox1.grid(row=0, column=1)
 
#crée la scrollbar
yscroll = tk.Scrollbar(command=listbox1.yview, orient=tk.VERTICAL)
yscroll.grid(row=0, column=0, sticky=tk.N+tk.S)
listbox1.configure(yscrollcommand=yscroll.set)


#insère les éléments de chem_list dans la listbox
for item in chem_list:
    listbox1.insert(tk.END, item)
 

pka_corresp=tk.Label(root, text='pKa correspondant:')
pka_corresp.grid(row=1,column=1)
#affiche le pKa correspondant, à chaque cliq
listbox1.bind('<ButtonRelease-1>', get_acide)
label=tk.Label(root)
label.grid(row=2,column=1)

boutongraphe = tk.Button(root, text="Tracer le graphe!", command=graphe_acide)
boutongraphe.grid(row=3, column=1)

root.mainloop()

Pour les bases :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# travail de QD et TB, ba2 chimie 2012-2013

import Tkinter as tk
from numpy import *
import matplotlib.pyplot as plt

def get_base(event):
    """
    fonction pour lire la séléction dans la listbox
    et afficher le pKa correspondant
    """
    indexbase=listbox1.curselection()[0]
    seltextbase=listbox1.get(indexbase)
    listebase= ['NH3','Aniline (C6H5NH2)', 'Benzylamine (C6H5CH2NH2)', 'n-Butylamine (CH3CH2CH2CH2NH2)', 'Diethylamine (CH3CH2NHCH2CH3)', 'Pyridine (C5H5N)', 'CH3-', 'NH2-', 'OH-']
    listepka=[9.2, 4.62, 9.33, 10.59, 11.68, 5.21, 48, 23, 24]
    baseselect=listebase.index(seltextbase)
    pkaselect=listepka[baseselect]
    label['text']=pkaselect

def graphe_base () :
    """ foncton qui va tracer le graphe
    du pH de l'acide sélectionné en
    fonction de sa concentration
    """
    
    indexbase=listbox1.curselection()[0]
    seltextbase=listbox1.get(indexbase)
    listebase= ['NH3','Aniline (C6H5NH2)', 'Benzylamine (C6H5CH2NH2)', 'n-Butylamine (CH3CH2CH2CH2NH2)', 'Diethylamine (CH3CH2NHCH2CH3)', 'Pyridine (C5H5N)', 'CH3-', 'NH2-', 'OH-']
    listepka=[9.2, 4.62, 9.33, 10.59, 11.68, 5.21, 48, 23, 24]
    baseselect=listebase.index(seltextbase)
    pkaselect=listepka[baseselect]

    if pkaselect < 14:
        x=[0.0001,0.001,0.01,0.1,1]
        y=7+0.5*log10(x)+0.5*pkaselect
        l1=plt.semilogx(x,y,color='m',linewidth=2)
        lx=plt.xlabel("Concentration")
        ly=plt.ylabel("pH")
        t1=plt.title("pH d'une base faible en fonction de la concentration")
        plt.show()

    elif pkaselect > 14:
        x=[0.0001,0.001,0.01,0.1,1]
        y=14+log10(x)
        l1=plt.semilogx(x,y,color='m',linewidth=2)
        lx=plt.xlabel("Concentration")
        ly=plt.ylabel("pH")
        t1=plt.title("pH d'une base forte en fonction de la concentration")
        plt.show()
    

#on crée un sample de données pour la listbox
str1= """NH3
Aniline (C6H5NH2)
Benzylamine (C6H5CH2NH2)
n-Butylamine (CH3CH2CH2CH2NH2)
Diethylamine (CH3CH2NHCH2CH3)
Pyridine (C5H5N)
CH3-
NH2-
OH-"""

#va écrire un fichier .txt dans lequel on met le sample
#fout -->file output et fin --> file input sont des
#fonctions d'édition de fichiers. Ici, le w veut dire 'writing'
#et le r veut dire 'reading'
fout = open("chem_data_base.txt", "w")
fout.write(str1)
fout.close()
 
#va lire le fichier .txt
fin = open("chem_data_base.txt", "r")
chem_list = fin.readlines()
fin.close()

#rtstrip pour recopier ce qu'il y a
chem_list = [chem.rstrip() for chem in chem_list]

#crée la fenêtre Tk
root = tk.Tk()
root.title("Graphique Base")

#crée la listbox
listbox1 = tk.Listbox(root, width=35, height=6)
listbox1.grid(row=0, column=0)
 
#crée la scrollbar
yscroll = tk.Scrollbar(command=listbox1.yview, orient=tk.VERTICAL)
yscroll.grid(row=0, column=1, sticky=tk.N+tk.S)
listbox1.configure(yscrollcommand=yscroll.set)


#insère les éléments de chem_list dans la listbox
for item in chem_list:
    listbox1.insert(tk.END, item)
 

pka_corresp=tk.Label(root, text='pKa correspondant:')
pka_corresp.grid(row=1,column=0)
#affiche le pKa correspondant, à chaque cliq
listbox1.bind('<ButtonRelease-1>', get_base)
label=tk.Label(root)
label.grid(row=2,column=0)

boutongraphe = tk.Button(root, text="Tracer le graphe!", command=graphe_base)
boutongraphe.grid(row=3, column=0)

root.mainloop()

Ce site web utilise des cookies pour analyser le trafic de visites. En restant sur ce site, vous acceptez le stockage de cookies sur votre ordinateur. En savoir plus
teaching/progappchim/ph_acides_bases_2013.txt · Dernière modification: 2013/11/29 11:16 par villersd