IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Interface graphique tkinter + superpositions de bandes colorées à un graphique


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Interface graphique tkinter + superpositions de bandes colorées à un graphique
    Bonjour à tous.

    Nous avons un graphique, voici le code :

    import numpy as np
    import math
    from matplotlib.pyplot import *
    from Tkinter import *

    def volume(pK,ca,va,cb,ph):
    n = len(pK)
    Ke = 1.0e-14
    h = 10**(-ph)
    c = np.ones(n+1)
    Da = 1
    kk = 1
    for p in range(1,n+1):
    kk *= 10**(-pK[p-1])
    x = h**p/kk
    c[p] = x
    Da += x
    Na = n
    kk = 1
    for p in range(1,n):
    kk *= 10**(-pK[p-1])
    Na += (n-p)*h**p/kk
    y = Ke/h-h
    vb = va*(y+Na*ca/Da)/(cb-y)
    for p in range(n+1):
    c[p] *= ca*va/(va+vb)/Da
    return [vb,c]

    def plot_pH(pK,ca,va,cb,vb_max):
    npts = 1000
    pH = np.zeros(npts)
    vb = np.zeros(npts)
    ph_max = 14+math.log10((vb_max*cb-ca*va)/(vb_max+va))
    dph = ph_max/(npts-1)
    for i in range(npts):
    ph = dph*i
    [vb[i],c] = volume(pK,ca,va,cb,ph)
    pH[i] = ph
    plot(vb,pH)
    axis([0,vb_max,0,14])
    xlabel("vB")
    ylabel("pH")

    pK = [12.1,7.2,2.15]
    ca = 0.01
    cb = 0.01
    va = 10.0

    figure(figsize=(10,6))
    vb_max = 40.0
    plot_pH(pK,ca,va,cb,vb_max)
    grid()
    title("$H_3PO_4+NaOH$")

    def plot_frac(pK,ca,va,cb,vb_max):
    npts = 1000
    n = len(pK)
    vb = np.zeros(npts)
    frac = np.zeros((n+1,npts))
    ph_max = 14+math.log10((vb_max*cb-ca*va)/(vb_max+va))
    dph = ph_max/(npts-1)
    for i in range(npts):
    ph = dph*i
    [vb[i],c] = volume(pK,ca,va,cb,ph)
    for p in range(n+1):
    frac[p][i] = c[p]*(vb[i]+va)/(ca*va)*100
    for p in range(0,n+1):
    s1 = "H_{"+str(p)+"}"
    if p==0:
    s1 = ""
    elif p==1:
    s1 = "H"
    s2 = "A^{"+str(n-p)+"-}"
    if n-p==0:
    s2 = "A"
    elif n-p==1:
    s2 = "A^-"
    plot(vb,frac[p],label="$"+s1+s2+"$")

    axis([0,vb_max,0,100])
    xlabel("vB")
    ylabel("%")

    figure(figsize=(10,6))
    plot_frac(pK,ca,va,cb,vb_max)
    legend(loc="upper right")
    grid()
    title("$H_3PO_4+NaOH$")

    show()


    Mais voilà, au lieu d'imposer des valeurs à ca, cb et va, nous aimerions créer une interface tkinter permettant à l'utilisateur du programme d'insérer les valeurs qu'ils désirent. Comment peut-on faire ?

    Ensuite, ma deuxième question porte sur le graphique. Nous aimerions dessiner des bandes de couleurs sur le premier graphe aux pH : bleu de thymol 1,2 - 2,8 ; bleu de bromothymol 6,2 - 7,6 ; phénolphtaléine 8,0 - 10. Comment peut-on faire ?

    Merci d'avance de votre réponse.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut.
    Edite ton message et ajoute des balises codes (bouton # dans la barre de navigation).

    Mais voilà, au lieu d'imposer des valeurs à ca, cb et va, nous aimerions créer une interface tkinter permettant à l'utilisateur du programme d'insérer les valeurs qu'ils désirent. Comment peut-on faire ?
    Utilisez les widgets de base de Tkinter (Entry). Il y a plein d'exemples dans le forum Tkinter.

    Ensuite, ma deuxième question porte sur le graphique. Nous aimerions dessiner des bandes de couleurs sur le premier graphe aux pH : bleu de thymol 1,2 - 2,8 ; bleu de bromothymol 6,2 - 7,6 ; phénolphtaléine 8,0 - 10. Comment peut-on faire ?
    Avec matplotlib.pyplot.barh par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import matplotlib.pyplot as plt
    ...
    ax = plt.gca()
    ax.barh(bottom=1.2, width=vb_max, height=1.6, color='blue', label='bleu de thymol')
    ax.barh(bottom=6.2, width=vb_max, height=1.4, color='cyan', label='bleu de bromothymol')
    ax.barh(bottom=8.0, width=vb_max, height=2.0, color='magenta', label='phénolphtaléine')
    plt.legend()
     
    plt.plot(vb, pH)
    plt.axis([0, vb_max, 0, 14])
    plt.xlabel("vB")
    plt.ylabel("pH")

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup de votre réponse.

    Ok je n'oublierai pas pour la prochaine fois. En effet, je suis débutant dans le domaine, je n'ai pas l'habitude de ce genre de forum.

    Ok merci, je vais regarder à ça.

    En ce qui concerne le code que vous m'avez fourni, c'est gentil, je l'ai testé mais je ne comprends pas pourquoi ça ne fonctionne pas : il me met que vb n'est pas défini. Voici le message :

    Traceback (most recent call last):
    File "C:\Users\hugo\Desktop\2ème bac\programmation\Travail python H et A.py", line 62, in <module>
    plt.plot(vb, pH)
    NameError: name 'vb' is not defined

    Que puis-je faire dans ce cas-là ? Ce n'est pas la première fois que j'ai ce message d'erreur..

    Encore merci pour votre réponse.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Traceback (most recent call last):
    File "C:\Users\hugo\Desktop\2ème bac\programmation\Travail python H et A.py", line 62, in <module>
    plt.plot(vb, pH)
    NameError: name 'vb' is not defined
    Le code est fait pour être intégrer au programme. Exécuté tel quel vb n'est pas défini à l'appel. Voici un programme autonome (avec des données bidon) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import math
    import numpy as np
    import matplotlib.pyplot as plt
     
     
    vb = np.linspace(0, 8 * np.pi, 512)
    vb_max = math.ceil(vb.max())
    pH = 7 * (np.cos(vb) + 1)
     
     
    ax = plt.gca()
    ax.barh(1.2, vb_max, height=1.6, color='blue', label='bleu de thymol')
    ax.barh(6.2, vb_max, height=1.4, color='cyan', label='bleu de bromothymol')
    ax.barh(8.0, vb_max, height=2.0, color='magenta', label='phénolphtaléine')
    plt.legend()
     
    plt.plot(vb, pH)
    plt.axis([0, vb_max, 0, 14])
    plt.xlabel("vB")
    plt.ylabel("pH")
     
    plt.show()
    Nom : mpl_tkinter_ph.png
Affichages : 397
Taille : 41,2 Ko

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Ah oui, dsl..

    En tout cas, merci beaucoup pour vos précieux conseils.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec mon interface graphique Tkinter
    Par SamirIV dans le forum Tkinter
    Réponses: 0
    Dernier message: 09/05/2014, 22h08
  2. Interface utilisateur Tkinter
    Par AliFirat91 dans le forum Tkinter
    Réponses: 1
    Dernier message: 12/05/2012, 09h17
  3. [area]problème de superposition de bande
    Par bakaratoun dans le forum MATLAB
    Réponses: 6
    Dernier message: 08/03/2010, 16h38
  4. probleme d'affichage asus rayure, bande coloré.
    Par stephane543 dans le forum Ordinateurs
    Réponses: 6
    Dernier message: 21/11/2009, 20h23
  5. Réponses: 4
    Dernier message: 12/04/2005, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo