[IPython-user] embedding a shell in gtk app
Fernando.Perez at colorado.edu
Wed Feb 2 12:55:54 CST 2005
John Hunter wrote:
> I have a gtk app that I would like to interact with from the shell. I
> am wondering if this is possible with the new changes to support gtk
> threading. The naive thing, just using IPShellEmbed, freezes the
> app. Here is the play gtk app I am testing with
> Basically, I want to be able to access interactively some vtk objects
> my app creates, to call methods on them, etc. I am not interested in
> scripting the GTK specific stuff at this time....
OK, I hate to say this, but with all the matshow() work, I'm badly behind on
other things and I won't be able to dive into this til later. Esp. because
this may take some careful work for a permanent solution. But in the
meantime, I can offer some pointers to get you started.
1. The best solution would be to work with IPython/Shell.py. I think what we
need to do is make an embeeded version of IPShellGTK, which already has all
the GTK threading machinery. You did much of this already (you wrote a good
chunk of that code), so it shouldn't be too bad. The question is what the
cleanest class hierarchy would be in that file, to avoid much duplication. I
think with the matplotlib shell classes we got a decent organization, but I
never included the Embed class in all of that design. So a bit of shuffling
around of code might be needed.
2. If you want to play with a much simpler design, use the pyint-gtk stuff I
sent you recently to replace interactive.py. I just had a look at the mpl CVS
tree, and it's already in there (I think Steve committed it). That code
addresses fundamentally the same problem, and it is based on the same console
class as ipython, while being far smaller and easier to deal with. If
Shell.py feels too daunting, you might get something working with this guy. I
should be able to fold any such work into ipython proper later on.
Note that #1 might really be the way to go in the long run, even if the code
is a bit more complex. It's the right long-term solution, and the *Embed
class already has the namespace handling machinery necessary for embedded
I promise I'll work with your code as soon as I can, but I _really_ need to
continue writing the stuff which led me to the matshow() effort.
More information about the IPython-user