objects interfaz interfaces gui graficas grafica example ejemplos ejemplo crear con python user-interface matplotlib tkinter show

interfaz - tkinter python 2.7 example



importa el gráfico matplotlib en una interfaz gráfica de usuario de tkinter. Error en show() (1)

Tuve un problema similar, así que esto funcionó para mí. Si está usando Windows, sugiero desinstalar la pillow y matplotlib y reinstalar desde aquí

Intento incrustar un gráfico matplotlib en mi interfaz gráfica de usuario de tkinter. Después de muchos intentos de probar ejemplos publicados en el sitio matplotlib, ninguno de ellos parece funcionar.

Por ejemplo:

#!/usr/bin/env python import matplotlib matplotlib.use(''TkAgg'') from numpy import arange, sin, pi from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg # implement the default mpl key bindings from matplotlib.backend_bases import key_press_handler from matplotlib.figure import Figure import sys if sys.version_info[0] < 3: import Tkinter as Tk else: import tkinter as Tk root = Tk.Tk() root.wm_title("Embedding in TK") f = Figure(figsize=(5, 4), dpi=100) a = f.add_subplot(111) t = arange(0.0, 3.0, 0.01) s = sin(2*pi*t) a.plot(t, s) # a tk.DrawingArea canvas = FigureCanvasTkAgg(f, master=root) canvas.show() canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) toolbar = NavigationToolbar2TkAgg(canvas, root) toolbar.update() canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) def on_key_event(event): print(''you pressed %s'' % event.key) key_press_handler(event, canvas, toolbar) canvas.mpl_connect(''key_press_event'', on_key_event) def _quit(): root.quit() # stops mainloop root.destroy() # this is necessary on Windows to prevent # Fatal Python Error: PyEval_RestoreThread: NULL tstate button = Tk.Button(master=root, text=''Quit'', command=_quit) button.pack(side=Tk.BOTTOM) Tk.mainloop() # If you put root.destroy() here, it will cause an error if # the window is closed with the window manager.

El ejemplo anterior me da este error:

Traceback (most recent call last): File "<tmp 1>", line 34, in <module> canvas.show() File "C:/pyzo2015a/lib/site-packages/matplotlib/backends/backend_tkagg.py", line 350, in draw tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2) File "C:/pyzo2015a/lib/site-packages/matplotlib/backends/tkagg.py", line 24, in blit tk.call("PyAggImagePhoto", photoimage, id(aggimage), colormode, id(bbox_array)) _tkinter.TclError

Otro ejemplo:

#!/usr/bin/env python # -*- noplot -*- import matplotlib as mpl import numpy as np import sys if sys.version_info[0] < 3: import Tkinter as tk else: import tkinter as tk import matplotlib.backends.tkagg as tkagg from matplotlib.backends.backend_agg import FigureCanvasAgg def draw_figure(canvas, figure, loc=(0, 0)): """ Draw a matplotlib figure onto a Tk canvas loc: location of top-left corner of figure on canvas in pixels. Inspired by matplotlib source: lib/matplotlib/backends/backend_tkagg.py """ figure_canvas_agg = FigureCanvasAgg(figure) figure_canvas_agg.draw() figure_x, figure_y, figure_w, figure_h = figure.bbox.bounds figure_w, figure_h = int(figure_w), int(figure_h) photo = tk.PhotoImage(master=canvas, width=figure_w, height=figure_h) # Position: convert from top-left anchor to center anchor canvas.create_image(loc[0] + figure_w/2, loc[1] + figure_h/2, image=photo) # Unfortunatly, there''s no accessor for the pointer to the native renderer tkagg.blit(photo, figure_canvas_agg.get_renderer()._renderer, colormode=2) # Return a handle which contains a reference to the photo object # which must be kept live or else the picture disappears return photo # Create a canvas w, h = 300, 200 window = tk.Tk() window.title("A figure in a canvas") canvas = tk.Canvas(window, width=w, height=h) canvas.pack() # Generate some example data X = np.linspace(0, 2.0*3.14, 50) Y = np.sin(X) # Create the figure we desire to add to an existing canvas fig = mpl.figure.Figure(figsize=(2, 1)) ax = fig.add_axes([0, 0, 1, 1]) ax.plot(X, Y) # Keep this handle alive, or else figure will disappear fig_x, fig_y = 100, 100 fig_photo = draw_figure(canvas, fig, loc=(fig_x, fig_y)) fig_w, fig_h = fig_photo.width(), fig_photo.height() # Add more elements to the canvas, potentially on top of the figure canvas.create_line(200, 50, fig_x + fig_w / 2, fig_y + fig_h / 2) canvas.create_text(200, 50, text="Zero-crossing", anchor="s") # Let Tk take over tk.mainloop()

Este me da este error:

Traceback (most recent call last): File "<tmp 2>", line 56, in <module> fig_photo = draw_figure(canvas, fig, loc=(fig_x, fig_y)) File "<tmp 2>", line 32, in draw_figure tkagg.blit(photo, figure_canvas_agg.get_renderer()._renderer, colormode=2) File "C:/pyzo2015a/lib/site-packages/matplotlib/backends/tkagg.py", line 24, in blit tk.call("PyAggImagePhoto", photoimage, id(aggimage), colormode, id(bbox_array)) _tkinter.TclError

No entiendo por qué estos ejemplos no funcionan. ¿Puede alguien ayudarme?