realtime real navigationtoolbar2tkagg gui figurecanvastkagg python canvas grid matplotlib tkinter

python - real - seaborn plot in tkinter



Python Tkinter Incrustar Matplotlib en GUI (1)

No tienes otros widgets, por lo que es difícil saber dónde quieres otros widgets. Sin embargo, esto es lo que puedo decirle: al hacer dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1) le está pidiendo a Tkinter que llene la pantalla con la trama. Esto, porque le pide que complete todas las direcciones ( fill=BOTH ) y expanda para llenar cualquier espacio adicional ( expand=1 ).

Sin embargo, todavía puede agregar otros widgets. pack funciona colocando los widgets en un lado de un contenedor. Tu contenedor, master , siempre tiene cuatro lados. Entonces, por ejemplo, si quisieras crear una barra de herramientas, harías algo como:

toolbar = tk.Frame(master) button = tk.Button(toolbar, text="Push me") button.pack(side="left") # left side of parent, the toolbar frame toolbar.pack(side=TOP, fill="x") # top of parent, the master window

¡Tenga en cuenta que si coloca este código después del código donde pack el gráfico, la barra de herramientas se muestra en la parte inferior! Esto se debe a que TOP , BOTTOM , etc. se refieren al espacio dejado por cualquier otro widget que ya haya sido pack . La trama ocupa la parte superior, el espacio que queda es en la parte inferior. Así que cuando vuelvas a especificar TOP significa "en la parte superior del área debajo de lo que ya está en la parte superior".

Entonces, tienes algunas opciones. La mejor opción es hacer que sus widgets en el orden en que desea que aparezcan. Si pack la barra de herramientas en la parte superior antes de pack el gráfico, será la barra de herramientas la que se mostrará en la parte superior. Además, puede colocar el gráfico en la parte inferior en lugar de en la parte superior y eso también resolverá el problema.

Por cierto, normalmente creo mis widgets en un bloque, luego los coloco en un bloque separado. Me parece que hace que el código sea más fácil de mantener.

Otra opción que puede adaptarse mejor a su modelo mental es hacer una grid lugar de un pack . Con la grid puede elegir la (s) fila (s) y columna (s) que ocupa el widget. Esto facilita colocar las cosas en una cuadrícula, pero a costa de tener que usar un poco más de código.

Por ejemplo, para colocar la barra de herramientas en la parte superior y la gráfica abajo, podría hacer lo siguiente:

toolbar.grid(row=1, column=1, sticky="ew") dataPlot.get_tk_widget().grid(row=1, column=1, sticky="nsew") master.grid_rowconfigure(0, weight=0) master.grid_rowconfigure(1, weight=1) master.grid_columnconfigure(0, weight=1)

Observe que las filas y columnas comienzan en cero. Además, "peso" se refiere a cuánto se expande este widget en relación con otros widgets. Con dos filas de igual peso, se expandirán por igual cuando se cambie el tamaño de la ventana. Un peso de cero significa que no hay expansión. Un peso de 2 para una fila y 1 para otra significa que el primero se expandirá el doble que el segundo.

Para obtener más información, consulte esta página en la cuadrícula y esta página en el paquete .

Estoy intentando incrustar un gráfico en mi GUI Tkinter codificada en Python. Creo que el siguiente código tiene éxito simplemente al poner un gráfico en un lienzo, pero no tengo ningún control sobre la ubicación del lienzo dentro de la cuadrícula de la GUI. Quiero poder tener una subsección de mi GUI en la trama ... no en la totalidad de ella. ¿Cómo puedo posicionar este widget de lienzo?

#!/usr/apps/Python/bin/python import matplotlib, sys matplotlib.use(''TkAgg'') from numpy import arange, sin, pi from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg from matplotlib.figure import Figure from Tkinter import * master = Tk() master.title("Hello World!") #------------------------------------------------------------------------------- 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) dataPlot = FigureCanvasTkAgg(f, master=master) dataPlot.show() dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1) #------------------------------------------------------------------------------- master.mainloop()