Forum
>>
Programmazione Python
>>
Calcolo scientifico
>>
Come combinare tkinter e matlpltlib insieme?
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Domedron |
2022-04-29 20:16:38 - Come combinare tkinter e matlpltlib insieme?
|
Buongiorno comunità, ho un problema da risolvere e cerco ogni utile contributo:
Quesito: Se creo uno spazio di lavoro con tknter, grazie all'uso dei frame so come collocare gli oggetti: pulsanti, Entry, .... Ma se in un frame volessi mettere un grafico di matplotlib in uno di quei frame come dovrei fare? Per esempio se questo lo volessi gestire insieme ad altri oggetti come dovrei fare?: import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_axes([0,0,1,1]) langs = ['V1', 'V2'] data = [23,17] X=np.arange(2) ax.bar(langs,data) plt.show() |
|
Scritto da nuzzopippo |
2022-05-10 09:32:25 - Re: Come combinare tkinter e matlpltlib insieme?
|
Probabilmente serve a poco, dato il tempo trascorso, ho letto tardi il post ed ho dovuto trovare qualche ritaglio di tempo per fare qualche ricerca, non conosco matplotlib ma l'argomento mi ha intrigato, sono giunto a poter fare una minimale esemplificazione sulla richiesta dello OP e, quindi, rispondo nel caso sia utile a qualcuno.
Bisogna fare alcune premesse : 1° : matplotlib può utilizzare diverse interfacce di backend per il suo funzionamento, alcune interattive, altre no, tra i backends interattivi vi sono un paio dedicati a tkinter ("TkAgg" e "TkCairo"), detti banckend possono venire inizializzati tramite la funzione "matplotlib.use(backend, *, force=True)", maggiori dettagli nella documentazione. 2° : matplotlib fornisce degli strumenti per interfacciarsi ai vari backends nel modulo "matplotlib.backends" ed in particolare degli oggetti di interfaccia a tkinter con "backend_tkagg". Particolarmente interessante è lo strumento "FigureCanvas" nelle sue varie declinazioni, probabile "contenitore" finale di un grafico da realizzarsi. La API specifica è piuttosto scarna e rimanda agli stralci di codice relativi alla rispettiva implementazione, per comprendere bene il funzionamento è probabile occorra un notevole lavoro di analisi degli oggetti sub-classati nei vari step di definizione delle classi. Altro interessante "strumento" è la classe "Figure" del modulo "matplotlib.figure", fornisce un oggetto astratto per la definizione dei grafici, la API è articolata e da studiarsi. Con detti "mezzi" è possibile realizzare uno sbrigativo esempio di "plottaggio" di un grafico in una finestra tkinter, il sottostante codice # -*- coding: utf-8 -*- import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import tkinter as tk class MyApp(tk.Tk): def __init__(self): super().__init__() self.title('Prova Domedron') self._populate() def _populate(self): fig = self._fig_base() self.canvas = FigureCanvasTkAgg(fig, self) self.canvas.draw() self.canvas.get_tk_widget().grid(row=0, column=0, sticky='nsew') self.grid_rowconfigure(0, weight=1) self.grid_columnconfigure(0, weight=1) def _fig_base(self): fig = Figure() ax = fig.add_axes([0, 0, 1, 1]) langs = ['V1', 'V2'] data = [23, 17] ax.bar(langs, data) return fig if __name__ == '__main__': app = MyApp() app.mainloop()Crea il grafico proposto da @Domedrom in una finestra tkinter, la figura del grafico viene ridimensionata con la finestra. Nell'esempio ci si è limitati alla mera realizzazione e visualizzazione del grafico proposto, sarebbe stato più interessante ma anche più lungo, esporre una definizione interattiva del grafico, sempre fattibile se occorre ma la "ossatura" necessaria è già contenuta nell'esempietto soprastante (e nella docs) Fatti non foste a viver come bruti... |
Pagina: 1
Esegui il login per scrivere una risposta.