[IPython-dev] Embed wxIPython/WxController in own app: How to access variables?
Gael Varoquaux
gael.varoquaux at normalesup.org
Sun Sep 28 17:27:59 EDT 2008
Hi,
Sorry for being slow to reply, I was travelling this week end.
On Thu, Sep 25, 2008 at 03:39:44PM +0200, Fabian Wenzel wrote:
> 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?
:). I think you should try to learn a bit what a dictionnary is in
Python, and understand the concept of namespace to do these things, but
anyhow, I'll try to help you right away. I don't have the code installed
on this computer, so I'll just try and modify your code. I can't garanty
that the resulting code will actually run :).
++++++++++++++++++++++++
# 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
# This variable should be accessible from the shell below
testinstance = Testclass()
# Here is a dictionnary which will be the namespace in which our shell
# runs. We bind the variables we are interested in accessing in it.
namespace = dict()
namespace['testinstance'] = testinstance
namespace['Testfunc'] = Testfunc
interp = Interpreter(user_ns=namespace)
# Generate frame
app = wx.PySimpleApp()
frame = wx.Frame(None, wx.ID_ANY)
# Generate shell child
shell = WxController(frame, wx.ID_ANY, shell=interp)
frame.Show()
app.MainLoop()
+++++++++++++++++++++++++++++++++++++++++++
HTH,
Gaƫl
More information about the IPython-dev
mailing list