Hi everyone,

I am a developer on a PyGTK application for Earth Science research and 
education called SEATREE ( http://geosys.usc.edu/projects/seatree/wiki ) 
and we are trying to integrate some pylab plots.

I can successfully create and use a pylab frame/window inside of our GTK 
application using the following sequence (note that all of this is 
called AFTER the application has launched and the GTK main loop has 
started):

-------------------------------------
import math
import pylab as p
import matplotlib
from matplotlib.backends.backend_gtk import FigureCanvasGTK, 
NavigationToolbar   
matplotlib.use('GTK')

p.figure()
//set up the figure
//connect actions using p.connect('signal name', function)
p.show()
-------------------------------------

Then, once I'm done with the plot and it is closed, p.close() is called.

All of that works fine, and I actually like the blocking nature of the 
p.show() method (I know this probably isn't the best way since I already 
have a GTK main loop going). The problem arises when I try to display 
the plot again. If I just call the p.show() method for a 2nd time, it 
does not block execution of my function, and the plot shows up but is 
unresponsive with full CPU utilization. My main GTK window for the 
application is enabled and responsive during this time.

I then tried using the following code to show the window (either both 
times or just the 2nd time around):

-------------------------------------
for manager in Gcf.get_all_fig_managers():
        manager.window.show()
-------------------------------------

But I get an error that is very strange, as it references Tkinter even 
though I am using GTK:

-------------------------------------
Traceback (most recent call last):
  File 
"/home/kevin/workspace_seatree/SEATREE/py-drivers/py-hc/flowGUI.py", 
line 379, in editVisc
    manager.window.show()
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1724, in __getattr__
    return getattr(self.tk, attr)
AttributeError: show
-------------------------------------

Finally, I tried just not calling anything after p.frame() the second 
time through (besides doing the signal connecting again), and this time 
the plot window will show up, but signals will not be processed 
(including trying to close the plot with the 'x' on the window frame).

I also tried just embedding a FigureCanvasGTK object displaying the 
figure to my own gtk.Dialog object, which works for displaying the plot, 
but I couldn't figure out how to get the pylab events to be processed 
and connected (I need to modify the plot by clicking on parts of it). If 
I could figure out the even handling, this would actually be the 
preferred method of showing the plot. This is the code for this attempt:

-------------------------------------
self.dialog = gtk.Dialog(title=title, parent=parent, flags= 
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT)
self.canvas = FigureCanvasGTK(self.figure)
self.dialog.vbox.pack_start(self.canvas)
self.dialog.show_all()
self.dialog.show()
-------------------------------------

Does anyone have any suggestions? Thanks a ton for making it this far 
through my long message!

Kevin Milner

P.S. see full source here: (the pylab stuff is dirty cause it's in 
debugging stages)
See bottom for the p.show() call: 
http://geosys.usc.edu/projects/seatree/browser/py-drivers/py-hc/flowGUI.py
Event processing/plot creation and manipulation: 
http://geosys.usc.edu/projects/seatree/browser/py-drivers/py-hc/manipulate_hc.py

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to