On Dec 30, 3:41 pm, Steve Holden <st...@holdenweb.com> wrote: > 5lvqbw...@sneakemail.com wrote: > > Hi, I've looked around for a way to allow a python console from within > > a wxPython application, but have only found stuff on embedded/ > > extending python with C/C++ or wxWidgets in C++, but not wxPython. > > > Is this easy to do? Can someone point me in the right direction? > > > Also, typically when you embed a scripting language into a larger > > application, how do you get the console environment to share data with > > the larger application? > > > For instance, if the application has some gui stuff (for example > > clicking on a object and dragging it around), how do you get > > "object.select(x,y)" to print out on the console, and vice-versa: the > > object gets selected if the user types "object.select(x,y)"? > > > I'd like the console to be a bidirectional representation of what's > > going on in the gui, plus a general purpose evaluation environment > > where you can manipulate application data via some api which is > > automatically exposed to the console when the application opens up. > > > I'm looking for high-level hints/strategies/directions. > > I seem to remember you can create your wxApp with an argument of True or > False. One of those settings creates a window containing any output to > sys.stderr, if I remember rightly. > > regards > Steve > -- > Steve Holden +1 571 484 6266 +1 800 494 3119 > Holden Web LLC http://www.holdenweb.com/
That's true...or you can just redirect stdout, which is what the demo does. Here's one way to do it: <code> import sys import wx class RedirectText: def __init__(self,aWxTextCtrl): self.out=aWxTextCtrl def write(self,string): self.out.WriteText(string) class MyForm(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, wx.ID_ANY, "wxPython Redirect Tutorial") # Add a panel so it looks the correct on all platforms panel = wx.Panel(self, wx.ID_ANY) log = wx.TextCtrl(panel, wx.ID_ANY, size=(300,100), style = wx.TE_MULTILINE|wx.TE_READONLY| wx.HSCROLL) btn = wx.Button(panel, wx.ID_ANY, 'Push me!') self.Bind(wx.EVT_BUTTON, self.onButton, btn) # Add widgets to a sizer sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(log, 1, wx.ALL|wx.EXPAND, 5) sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5) panel.SetSizer(sizer) # redirect text here redir=RedirectText(log) sys.stdout=redir def onButton(self, event): print "You pressed the button!" # Run the program if __name__ == "__main__": app = wx.PySimpleApp() frame = MyForm().Show() app.MainLoop() </code> - Mike -- http://mail.python.org/mailman/listinfo/python-list