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 :

(Tkinter) Intégrer graphiques dans racine ? (Frames, classes, .. ?) [Python 3.X]


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut (Tkinter) Intégrer graphiques dans racine ? (Frames, classes, .. ?)
    Bonjour,

    Je suis actuellement sur un projet qui consiste à interpréter des signaux sous forme de graphiques avec tkinter, mais le problème c'est que les graphiques sont affichés chacune dans une fenêtre séparée. Or, je souhaite qu'ils soient tous intégrés dans l'interface que je souhaite créer, de manière à interagir plus facilement et d'un point de vue ergonomique.
    Alors, apparemment ce serait possible en utilisant des classes, mais aussi avec des frames.

    Donc, ma question est : Quelle est la meilleure solution ?

    J'ai déjà commencé à regarder les classes avec un peu de mal, mais au final j'obtiens ce code :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #!/usr/bin/python
    # -*- coding: iso-8859-1 -*-
     
    import tkinter as Tkinter
    import math
    import matplotlib
    import matplotlib.pyplot as plt
    import numpy as np
     
    matplotlib.use('TkAgg')
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
     
    class simpleapp_tk(Tkinter.Tk):
    	def __init__(self,parent):
    		Tkinter.Tk.__init__(self,parent)
    		self.parent = parent
    		self.initialize()
     
    	def initialize(self):
    		self.grid()
     
    		fig3 = plt.figure(3)
     
    		entry = Tkinter.Entry(self) # Pour placer sa nouvelle fréquence
     
    		canvas = FigureCanvasTkAgg(fig3, master=self)
    		plot_widget = canvas.get_tk_widget()
     
    		plt.ion()
    		t = np.arange(0, 100, 0.001) # entre 0 et 20 ms
    		frequence = 50 # 50 Hz par défaut
    		s = np.sin(2*np.pi*frequence*(t/1000)) # valeur de tensions par défaut pour 50 Hz
    		plt.plot(t, s) # tracé du signal
     
    		self.entry = Tkinter.Entry(self)
    		self.entry.grid(column=0,row=0,sticky='EW')
     
    		button = Tkinter.Button(self,text=u"Click me !")
    		button.grid(column=1,row=0)
     
    		label = Tkinter.Label(self,
    							  anchor="w",fg="white",bg="blue")
    		label.grid(column=0,row=1,columnspan=2,sticky='EW')
     
    		if entry.get():
    			plt.clf()
    			frequence = float(entry.get()) # Récupération de la fréquence
    			s = np.sin(2*np.pi*frequence*(t/1000)) # Recalcule de la tension instantanée pour chaque valeur de temps
    			plt.plot(t, s)
    			fig3.canvas.draw() # Mise à jour du tracé
     
    if __name__ == "__main__":
    	app = simpleapp_tk(None)
    	app.title('my application')
    	fig3 = plt.figure(3)
    	canvas = FigureCanvasTkAgg(fig3, master=self)
    	plot_widget = canvas.get_tk_widget()
    	plot_widget.grid(row=0, column=0)
    	champ_freq=Tkinter.Label(self,text="\nFrequence\n")
    	champ_freq.pack()
    	Tkinter.Button(self,text="Update",command=initialize).grid(row=1, column=0)
     
    	entry.grid(row=2, column=0)
     
    	app.mainloop()
    Pour l'instant, je n'ai essayé d'intégrer qu'un seul graphe, mais j'obtiens une erreur : " 'self' is not defined " .
    J'ai par ailleurs mis 2 fois les mêmes éléments à certains endroits car sinon j'avais d'autres erreurs de " not defined " ...

    Si quelqu'un avait une solution, j'apprécierais grandement. Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Vous devriez jetez un oeil aux subplot de matplotlib.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Intéressant et beaucoup plus simple, merci. En revanche, il resterait quand même 2 fenêtres au lieu d'une. Je n'ai jamais vu d'exemple de fenêtre graphique directement intégrée dans la racine.
    Serait-ce faisable ? Merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Akeran Voir le message
    Intéressant et beaucoup plus simple, merci. En revanche, il resterait quand même 2 fenêtres au lieu d'une. Je n'ai jamais vu d'exemple de fenêtre graphique directement intégrée dans la racine.
    Je ne comprends pas trop ce que vous racontez. Avez vous regardé les embedding_in_tk* dans ces exemples?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 7
    Par défaut
    Ok d'accord, je n'avais pas regardé cette section (lool)

    Mais j'avoue me sentir un peu au fond là, je viens d'avoir les deux solutions que je cherche depuis la semaine dernière.

    Bon bah merci beaucoup !

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par Akeran Voir le message
    Mais j'avoue me sentir un peu au fond là, je viens d'avoir les deux solutions que je cherche depuis la semaine dernière.
    Une bibliothèque comme matplotlib est assez riche en fonctionnalités et la documentation donne des tas d'exemples qu'on peut réutiliser facilement. Mais les débutants se laissent souvent avoir par leur clavier: c'est hyper-chronophage d'essayer de mettre au point un truc surtout quand on pense y être presque ...
    On oublie souvent qu'en développement, ce sont les derniers 5 à 10% du code qui bouffent 90 a 95% du temps.
    Essayez de lire la documentation complètement pour y prendre ses repères, voir ce qu'elle contient pour pouvoir y revenir plus tard, c'est moins ludique que de taper sur un clavier mais bien plus rentable côté temps.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Intégrer un MainFrame dans un Frame
    Par fripette dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 07/02/2008, 09h52
  2. Réponses: 10
    Dernier message: 15/05/2006, 10h57
  3. [Tkinter] Comment insérer une Frame dans une Frame ?
    Par THE_VIP dans le forum Tkinter
    Réponses: 2
    Dernier message: 30/04/2006, 22h15
  4. [Tkinter] image dans un Frame
    Par THE_VIP dans le forum Tkinter
    Réponses: 7
    Dernier message: 26/04/2006, 14h01
  5. [Tkinter] afficher un graphique dans un canevas
    Par Makino dans le forum Tkinter
    Réponses: 2
    Dernier message: 09/03/2006, 13h37

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