Non hai altri widget quindi è difficile sapere dove vuoi altri widget. Ecco cosa posso dirti: facendo dataPlot.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
stai chiedendo a Tkinter di riempire lo schermo con la trama. Questo perché lo chiedi di compilare tutte le direzioni (fill=BOTH
) ed espandilo per riempire qualsiasi spazio aggiuntivo (expand=1
).
Tuttavia, è possibile aggiungere altri widget. pack
funziona mettendo i widget su un lato di un contenitore. Il tuo contenitore, master
, ha sempre quattro lati. Così, per esempio, se si voleva creare una barra degli strumenti si dovrebbe fare qualcosa di simile:
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
Si noti che se si mette questo codice dopo codice in cui si pack
la trama, la barra degli strumenti si presenta sul fondo ! Questo perché TOP
, BOTTOM
, ecc. Si riferiscono allo spazio rimasto da qualsiasi altro widget che sia già stato pack
ed. La trama occupa la parte superiore, lo spazio rimasto è in basso. Quindi, quando si specifica TOP
di nuovo significa "nella parte superiore dell'area sottostante qualsiasi cosa sia già in cima".
Quindi, avete alcune scelte. La scelta migliore è quella di rendere i tuoi widget nell'ordine in cui desideri che vengano visualizzati. Se hai pack
la barra degli strumenti in alto prima del tuo pack
il grafico, sarà la barra degli strumenti che compare in alto. Inoltre, puoi posizionare la trama in fondo anziché in alto e questo risolverà anche il problema.
A proposito, in genere creo i miei widget in un blocco, quindi li espongo in un blocco separato. Trovo che rende il codice più facile da mantenere.
Un'altra scelta che può andare bene il vostro modello mentale migliore è quello di grid
invece dipack
. Con grid
puoi scegliere la (e) riga (e) e colonna (e) che occupa il widget. In questo modo è facile disporre le cose in una griglia, ma a spese di dover usare un po 'più di codice.
Ad esempio, per mettere la barra degli strumenti in alto e la trama in basso si potrebbe fare:
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)
Si noti che le righe e le colonne partono da zero. Inoltre, "peso" si riferisce a quanto questo widget si espande rispetto ad altri widget. Con due file di uguale peso, si espandono equamente quando la finestra viene ridimensionata. Un peso pari a zero significa nessuna espansione. Un peso di 2 per una riga e 1 per un'altra significa che il primo si espanderà il doppio rispetto al secondo.
Per ulteriori informazioni, vedere this page on grid e this page on pack.
Su una nota non del tutto indipendente, il tuo post mi è stato di grande aiuto per far funzionare il mio programma imparando come applicare il 'matplotlib.figure.Figure'. Grazie. – deadstump