Bonjour!
J'ai une question toute simple: j'aimerais savoir s'il y a un quelconque moyen d'insérer un plot Matplotlib dans une fenêtre Tkinter, peut-être sous forme de Canevas ou de fenêtre. J'ai Python 2.6 sous Linux.
Merci à tous !
Bonjour!
J'ai une question toute simple: j'aimerais savoir s'il y a un quelconque moyen d'insérer un plot Matplotlib dans une fenêtre Tkinter, peut-être sous forme de Canevas ou de fenêtre. J'ai Python 2.6 sous Linux.
Merci à tous !
Salut,
Sous forme de fenêtre, ce n'est pas trop difficile. Il faut simplement ouvrir une fenêtre Tkinter avant la fenêtre matplotlib.
A+
Pfeuh
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 import matplotlib.pyplot as plt import random import Tkinter import sys def quitApp(): plt.close() root.quit() sys.exit() def interrupt(): counter.set(counter.get() + 1) root.after(300, interrupt) def addPlot(): ax = plt.subplot(111) xdata = range(256) ydata = [random.randint(0,255) for counter in xdata] ax.plot(xdata, ydata) plt.show() root = Tkinter.Tk() Tkinter.Button(root, text=' ADD A PLOT ', command=addPlot).grid() counter = Tkinter.IntVar() Tkinter.Label(root, textvariable=counter).grid() root.protocol('WM_DELETE_WINDOW', quitApp) root.after(0, interrupt) root.mainloop()
oui, merci, je vois comment faire :-)
Maintenant, je voudrais créer une entrée dans Tkinter qui pourrait influer sur le plot en question. Par exemple, mon plot est un sinus et la valeur que je tape dans le champ d'entrée est la nouvelle amplitude de ce sinus. Comment faut-il procéder?
Merci de votre attention.
en fait, j'ai trouvé tout seul. Il suffit de définir une action (par exemple print ex.get() ) qui puissent être invoquée chaque fois qu'on clique sur un bouton, comme dans ce petit programme illustratif que je viens de taper:
cliquer sur le bouton fait un print du texte tapé dans le champ d'entrée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 from Tkinter import * root=Tk() e=StringVar() ent=Entry(root,textvariable=e) def action(): print e.get(),type(e.get()) b=Button(root,text='PRINT',command=action) b.pack() ent.pack() root.mainloop()
Et voilà! ;-P
Je pose la question ici car j'ai un problème analogue: j'ai un graph matplotlib.pyplot.bar() qui doit apparaitre a l'écran suite a une pression de bouton Tkinter, mais le graph n'apparait seulement après la fermeture de l'application, destruction de la fentre principale.
Pour illustrer:
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 from Tkinter import * import matplotlib.pyplot as plt from random import randint class Test() : def montre_graph(self) : self.a=[] self.b=[] i=0 while i < 256 : self.a.append(randint(0,256)) self.b.append(i) i += 1 plt.bar(self.b, self.a) plt.show() test=Test() fen=Tk() bout= Button(fen, text='montre graph', command=test.montre_graph) bout_quit= Button(fen, text='quit n show', command= fen.destroy) bout.pack() bout_quit.pack() fen.mainloop()
Pour faire tes armes:
Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
Et sois toujours bien armé avant de te lancer.
Le hasard ne sourit qu'aux gens préparés...
Site: Website programmation international (www.open-source-projects.net)
Site: Website imagerie 3D (www.3dreaming-imaging.net)
Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
FUN is HARD WORK !!!
Salut,
Je viens d'essayer ton code sous python 2.7, et XP. Je l'ai lancé de l'éditeur scite, il marche très bien, le plot apparait dès le click du bouton. Par contre, il ne disparait pas quand on ferme la fenêtre principale, ni en cliquant la croix ni en cliquant le bouton quit. J'ai résolu en modifiant un protocol... Qui n'existe peut être que sous Windows...
A+
Pfeuh
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 from Tkinter import * import matplotlib.pyplot as plt from random import randint class Test() : def montre_graph(self) : self.a=[] self.b=[] i=0 while i < 256 : self.a.append(randint(0,256)) self.b.append(i) i += 1 plt.bar(self.b, self.a) plt.show() def quitProperly(): plt.close() fen.destroy() test=Test() fen=Tk() bout= Button(fen, text='montre graph', command=test.montre_graph) bout_quit= Button(fen, text='quit n show', command=quitProperly) bout.pack() bout_quit.pack() fen.protocol("WM_DELETE_WINDOW", quitProperly) fen.mainloop()
Merci pour le discernement du problème entre plateformes mais je pense que c'est un problème de boucle principal, celle de Tkinter (mainloop()) a le dessus et celle de matplotlib se met en marche seulement après la fin de la boucle de Tkinter, les deux boucles ne pouvant pas fonctionner en meme temps.
J'ai essayer la doc de matplotlib: pratique la fonction recherche dans le lecteur Adobe et je suis tomber sur deux méthodes que je n'arrive pas a implémenter et me demande si ca marcherai:
matplotlib.backend_bases.FigureCanvasBase()
dont 2 méthodes contienne loop :
start_event_loop()
&
start_event_loop_default()
Si quelqu'un a une soluce ou connait bien matplotlib merci de m'aider.
Pour faire tes armes:
Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
Et sois toujours bien armé avant de te lancer.
Le hasard ne sourit qu'aux gens préparés...
Site: Website programmation international (www.open-source-projects.net)
Site: Website imagerie 3D (www.3dreaming-imaging.net)
Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
FUN is HARD WORK !!!
peut-être as-tu ce problème là?
http://www.developpez.net/forums/d10...b/#post5631903
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager