From: Federico A. <ari...@gm...> - 2013-10-11 17:13:13
|
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 -- |