No tiene otros widgets, por lo que es difícil saber dónde desea otros widgets. Sin embargo, esto es lo que puedo decirte: al hacer dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
le estás pidiendo a Tkinter que llene la pantalla con la trama. Esto, porque le pide que complete todas las direcciones (fill=BOTH
) y que se expanda para llenar cualquier espacio adicional (expand=1
).
Sin embargo, puede agregar otros widgets. pack
funciona colocando widgets en un lado de un contenedor. Su contenedor, master
, siempre tiene cuatro lados. Así, por ejemplo, si desea crear una barra de herramientas que haría 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 se pone el código después el código en el que pack
la trama, la barra de herramientas aparece en la parte inferior ! Eso es porque TOP
, BOTTOM
, etc. se refieren al espacio que sobraron de cualquier otro widget que ya haya sido pack
ed. La trama ocupa la parte superior, el espacio sobrante está en la parte inferior. Entonces, cuando especifique TOP
otra vez, significa "en la parte superior del área debajo de lo que ya está en la parte superior".
Entonces, usted tiene algunas opciones. La mejor opción es hacer sus widgets en el orden en que desea que aparezcan. Si pack
la barra de herramientas en la parte superior antes de pack
la trama, será la barra de herramientas la que aparecerá en la parte superior. Además, puede colocar la trama 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 aparte. Encuentro que hace que el código sea más fácil de mantener.
Otra opción que puede adaptarse a su modelo mental mejor es grid
en lugar depack
. Con grid
puede elegir la (s) fila (s) y columna (s) que ocupa el widget. Esto hace que sea fácil establecer cosas en una grilla, pero a expensas de tener que usar un poco más de código.
Por ejemplo, para poner la barra de herramientas en la parte superior y la trama abajo que podría hacer:
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)
en cuenta 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 por una fila y 1 por otra significa que la primera se expandirá el doble que la segunda.
Para obtener más información, vea this page on grid y this page on pack.
En una nota no completamente relacionada, su publicación fue muy útil para que mi programa funcione al aprender a aplicar el 'matplotlib.figure.Figure'. Gracias. – deadstump