From: Thomas A C. <tca...@uc...> - 2013-10-11 17:33:00
|
embedding vs launching is a distinction without a difference, you are integrating matplotlib with your own gui application. That said, it would be nice to re-factor the figure_manager classes so they they make no reference to `Gcf` or anything associated with pylab and could be easily re-used. I think that would also help with the issues in https://github.com/matplotlib/matplotlib/pull/2503 Tom On Fri, Oct 11, 2013 at 12:14 PM, Federico Ariza <ari...@gm...>wrote: > Again > > In the example the plotting is inside the callback (just for > simplicity), but in reality, the plotting is in another class, > somewhere else that can be called standalone to produce the plots. > > Federico > > On Fri, Oct 11, 2013 at 1:12 PM, Federico Ariza > <ari...@gm...> wrote: > > I am not embedding, just launching, as the example shows. > > > > Federico > > > > On Fri, Oct 11, 2013 at 1:11 PM, Thomas A Caswell <tca...@uc...> > wrote: > >> If you are embedding matplotlib, do not import `pyplot`. `pyplot` sets > up a > >> bunch of gui-magic (tm) in the background (as you found in > >> `figure_manager`). > >> > >> Tom > >> > >> > >> On Fri, Oct 11, 2013 at 11:57 AM, Federico Ariza < > ari...@gm...> > >> wrote: > >>> > >>> Hello everybody > >>> > >>> Working on one GTK3 app, that calls matplotlib to plot some figures, I > >>> found that closing all the figures from matplotlib kills my app also. > >>> The problem.... > >>> > >>> Gtk.main() is called only if there is no previous invocation, in my > >>> case, my Gtk3 app invokes main, so the mainloop won't call it again. > >>> > >>> #in backend_gtk3.py > >>> # > >>> class Show(ShowBase): > >>> def mainloop(self): > >>> if Gtk.main_level() == 0: > >>> Gtk.main() > >>> > >>> But in the "destroy" method of the figure manager calls Gtk.main_quit > >>> everytime that there are no more figures > >>> > >>> #in backend_gtk3.py inside destroy method of FigureManagerGTK3 > >>> # > >>> if Gcf.get_num_fig_managers()==0 and \ > >>> not matplotlib.is_interactive() and \ > >>> Gtk.main_level() >= 1: > >>> Gtk.main_quit() > >>> > >>> > >>> So basically we are not calling Gtk.main but we are Gtk.calling > main_quit. > >>> Isn't it more natural to call Gtk.main the same amount of times that > >>> we are going to call Gtk.main_quit? > >>> > >>> Adding matplotlib.rcParams['interactive'] = True doesn't help > >>> > >>> Here is my little testing code > >>> > >>> ############################## > >>> #file myapp.py > >>> > >>> import matplotlib > >>> matplotlib.rcParams['interactive'] = True > >>> matplotlib.use('GTK3AGG') > >>> import matplotlib.pyplot as plt > >>> > >>> from gi.repository import Gtk > >>> > >>> class MyWindow(Gtk.Window): > >>> > >>> def __init__(self): > >>> Gtk.Window.__init__(self, title="Hello World") > >>> > >>> self.button = Gtk.Button(label="Click Here") > >>> self.button.connect("clicked", self.on_button_clicked) > >>> self.add(self.button) > >>> > >>> def on_button_clicked(self, widget): > >>> fig = plt.figure() > >>> ax = fig.add_subplot(111) > >>> ax.plot([1,2,3]) > >>> plt.show() > >>> > >>> win = MyWindow() > >>> win.connect("delete-event", Gtk.main_quit) > >>> win.show_all() > >>> Gtk.main() > >>> ######################### > >>> > >>> I know this is related to interactive mode, but running from console > >>> >>> python myapp.py > >>> reproduces the problem > >>> > >>> Why hasattr(sys, 'ps1') is False? if I am running it from console? how > >>> do I change this? > >>> > >>> > >>> Thanks > >>> Federico > >>> > >>> P.S. Does anybody had the time to check my PR for multi-figure-manager? > >>> https://github.com/matplotlib/matplotlib/pull/2465 > >>> > >>> -- > >>> Y yo que culpa tengo de que ellas se crean todo lo que yo les digo? > >>> > >>> -- Antonio Alducin -- > >>> > >>> > >>> > ------------------------------------------------------------------------------ > >>> October Webinars: Code for Performance > >>> Free Intel webinars can help you accelerate application performance. > >>> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the > most > >>> from > >>> the latest Intel processors and coprocessors. See abstracts and > register > > >>> > >>> > http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk > >>> _______________________________________________ > >>> Matplotlib-devel mailing list > >>> Mat...@li... > >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-devel > >> > >> > >> > >> > >> -- > >> Thomas A Caswell > >> PhD Candidate University of Chicago > >> Nagel and Gardel labs > >> tca...@uc... > >> jfi.uchicago.edu/~tcaswell > >> o: 773.702.7204 > > > > > > > > -- > > Y yo que culpa tengo de que ellas se crean todo lo que yo les digo? > > > > -- Antonio Alducin -- > > > > -- > Y yo que culpa tengo de que ellas se crean todo lo que yo les digo? > > -- Antonio Alducin -- > -- Thomas A Caswell PhD Candidate University of Chicago Nagel and Gardel labs tca...@uc... jfi.uchicago.edu/~tcaswell o: 773.702.7204 |