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 :

rafraichir un FigureCanvasTkAgg


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 35
    Points
    35
    Par défaut rafraichir un FigureCanvasTkAgg
    Bonjour,

    Après de nombreuses recherches et une doc pas trés explicite, je me tourne vers vous pour trouver une solution à mon problème.
    Je souhaite afficher un graphique embarqué dans une fenêtre tkinter. Jusque là ça fonctionne, mais j'aimerais changer de graphique lorsque je clique sur un bouton.
    Le résultat est que le graphique s'affiche à l'ouverture, mais lorsque je clique sur le bouton, celui ci disparaît et la fenêtre n'affiche pas le nouveau graphe.
    J'ai cherché un moyen de faire un update sur le self.canvas, mais sans réussite. affichage_diagramme() et affichage_camembert() renvoient une Figure (aucun problèmes à ce niveau).

    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
    from tkinter import *
    import tkinter
    from tkinter.ttk import *
    from graphique import *
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
    from matplotlib.figure import Figure
     
    class test(tkinter.Tk):
     
    	def __init__(self, parent):
    			tkinter.Tk.__init__(self,parent)
    			self.parent = parent
    			self.fig = affichage_diagramme('test')
    			self.canvas = FigureCanvasTkAgg(self.fig, master=self)
    			self.initialize()
     
    	def initialize(self):
     
    		lancer = Button(self,text='LANCER',command=self.lancement)
    		lancer.pack(side=LEFT)
    		self.canvas.get_tk_widget().pack(side=RIGHT)
    		self.update()
     
    	def lancement(self):
    			self.fig.clear()
    			self.fig = affichage_camembert("Test")
    			self.canvas.draw()
     
    if __name__ == '__main__':
    	app = test(None)
    	app.title('Statistiques')
    	app.mainloop()
    Merci d'avance pour votre éclairage

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    cet exemple de code peut peut-être vous aider : http://matplotlib.org/examples/user_...ing_in_tk.html

    faut voir.

    @+.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 35
    Points
    35
    Par défaut
    Bonsoir,

    Je suis déja passé par ce code. C'est d'ailleurs grâce à celui ci que j'ai réussi à intégrer ma Figure dans un FigureCanvasTkAgg.
    Le seul problème vient quand je veut le rafraîchir avec une autre Figure...
    J'ai essayé un self.update_idletasks() mais ça ne change rien non plus...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 44
    Points : 35
    Points
    35
    Par défaut
    Bon, je viens de trouver une solution. Elle paraît peut être évidente mais ayant passé 2 jours sur ce problème, je ne la voyait pas.
    En fait, je détruit le canvas et en recréé un nouveau que je réagence dans la fenêtre au même endroit. Je trouve ça un peu "bourrin", mais faute de mieux je vais rester la dessus.
    Le nouveau code de la méthode lancement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def lancement(self):
    	self.fig.clear()
    	self.fig = affichage_camembert("Test")
    	self.canvas.get_tk_widget().destroy()
    	self.canvas = FigureCanvasTkAgg(self.fig,master=self)
    	self.canvas.get_tk_widget().pack(side=RIGHT)
    	self.canvas.draw()
    Si quelqu'un trouve quelque chose de plus propre, je suis preneur

Discussions similaires

  1. [Conception][Langue] Rafraichir une application
    Par smash31 dans le forum Général Java
    Réponses: 5
    Dernier message: 06/07/2004, 14h04
  2. Rafraichir TADOQuery
    Par koolkris dans le forum Bases de données
    Réponses: 6
    Dernier message: 13/05/2004, 16h14
  3. [API] Rafraichir une fenetre ?
    Par laurent_h dans le forum Windows
    Réponses: 2
    Dernier message: 17/04/2004, 23h26
  4. rafraichir un dbGrid
    Par undertacleur dans le forum Bases de données
    Réponses: 6
    Dernier message: 24/02/2004, 08h46
  5. Comment rafraichir le swf ?
    Par oazar dans le forum Flash
    Réponses: 3
    Dernier message: 17/10/2003, 13h08

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