Note

Go to the endto download the full example code.

GTK3 spreadsheet#

Example of embedding Matplotlib in an application and interacting with atreeview to store data. Double-click on an entry to update plot data.

importgigi.require_version('Gtk','3.0')gi.require_version('Gdk','3.0')fromgi.repositoryimportGdk,Gtkfromnumpy.randomimportrandomfrommatplotlib.backends.backend_gtk3aggimportFigureCanvas# or gtk3cairo.frommatplotlib.figureimportFigureclassDataManager(Gtk.Window):num_rows,num_cols=20,10data=random((num_rows,num_cols))def__init__(self):super().__init__()self.set_default_size(600,600)self.connect('destroy',lambdawin:Gtk.main_quit())self.set_title('GtkListStore demo')self.set_border_width(8)vbox=Gtk.VBox(homogeneous=False,spacing=8)self.add(vbox)label=Gtk.Label(label='Double click a row to plot the data')vbox.pack_start(label,False,False,0)sw=Gtk.ScrolledWindow()sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)sw.set_policy(Gtk.PolicyType.NEVER,Gtk.PolicyType.AUTOMATIC)vbox.pack_start(sw,True,True,0)model=self.create_model()self.treeview=Gtk.TreeView(model=model)# Matplotlib stufffig=Figure(figsize=(6,4))self.canvas=FigureCanvas(fig)# a Gtk.DrawingAreavbox.pack_start(self.canvas,True,True,0)ax=fig.add_subplot()self.line,=ax.plot(self.data[0,:],'go')# plot the first rowself.treeview.connect('row-activated',self.plot_row)sw.add(self.treeview)self.add_columns()self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK|Gdk.EventMask.KEY_PRESS_MASK|Gdk.EventMask.KEY_RELEASE_MASK)defplot_row(self,treeview,path,view_column):ind,=path# get the index into datapoints=self.data[ind,:]self.line.set_ydata(points)self.canvas.draw()defadd_columns(self):foriinrange(self.num_cols):column=Gtk.TreeViewColumn(str(i),Gtk.CellRendererText(),text=i)self.treeview.append_column(column)defcreate_model(self):types=[float]*self.num_colsstore=Gtk.ListStore(*types)forrowinself.data:store.append(tuple(row))returnstoremanager=DataManager()manager.show_all()Gtk.main()

Gallery generated by Sphinx-Gallery