[IPython-dev] Embed wxIPython/WxController in own app: How to access variables?

Fabian Wenzel f.wenzel at gmx.net
Thu Sep 25 09:39:44 EDT 2008


Hi,

thanks for your fast reply - I tried the code you posted in your answer but still could not get access to variables. So I believe I did not understand all details of your answer, and that may very well be because you were not sure what I was trying to accomplish. So here is some "dummy" example code:

++++++++++++++++++++++++

# Some class here...
class Testclass():
   def __init__(self):
      self.member = "SOMETHING"

# Some function here...
def Testfunc(instance):
   instance.member = "SOMETHINGELSE"

# Main program
if __name__ == "__main__":
   import wx
   from IPython.frontend.wx.wx_frontend import WxController
   from IPython.kernel.core.interpreter import Interpreter

   # These variable should be accessible from the shell below
   testinstance = Testclass()

   # Generate frame
   app = wx.PySimpleApp()
   frame = wx.Frame(None,wx.ID_ANY)

   # Generate shell child
   shell = WxController(frame,wx.ID_ANY)

   frame.Show()
   app.MainLoop()

+++++++++++++++++++++++++++++++++++++++++++

I did not check the code for errors, also some things are definitely missing
(sizers etc., I just typed it into this e-mail), but the idea is that
in the shell that I create above, I would like to type something like

Testfunc(testinstance)

as both, the function and the instance of Testclass() have been defined before. In PyCrust, this is possible.

Maybe I just did not get the meaning of the namespace and dictionary?


Regards,

           Fabian


> Yes. Well, I am not too sure what you are trying to accomplish. If you
> simply want to access the namespace, it is the
> wx_controller.shell.user_ns attribute: a dictionary object with the local
> namespace.
> 
> Now if you want to pass in your own namespace (say it is a reference to a
> shared dictionnary that you are using some place else in your
> application), the WxController accepts an interpreter as a keyword
> argument in its constructor. The interpreter also accepts a keyword
> argument to the namespace, so you can have something like this:
> 
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> namespace = dict()
> 
> from IPython.frontend.wx.wx_frontend import WxController
> from IPython.kernel.core.interpreter import Interpreter
> 
> interp = Interpreter(user_ns=namespace)
> 
> # Here you can play with your interpreter, eg evaluate commands in it,
> # without an UI. This is your model, in the MVC pattern
> 
> # ...
> 
> my_widget = WxController(parent, size, ..., shell=interp)
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Does this answer your question?
> 
> One remark: the Wx frontend code is pretty much a first cut
> implementation. It has some rough edges, and I am very unhappy about some
> design decisions. Hopefully I'll find time to improve it. I might break
> some downstream code when fixing this code (specifically, I am not happy
> at all with the poor MVC separation of the code, and the fact that the
> representation model is not well-defined outside the view). Please do
> consider this as a technology preview: it can be useful, but it is still
> code in movement.
> 
> HTH,
> 
> Gaël
> 
> 


____________________________________________________________________
Psssst! Schon vom neuen WEB.DE MultiMessenger gehört? 
Der kann`s mit allen: http://www.produkte.web.de/messenger/?did=3123




More information about the IPython-dev mailing list