<br><br><div class="gmail_quote">On 30 August 2010 09:18, Fernando Perez <span dir="ltr"><<a href="http://fperez.net">fperez.net</a>@<a href="http://gmail.com">gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi Almar,<br>
<br>
returning to your original thread, which got a little sidetracked by<br>
our licensing discussion... :)<br>
7<br>
<div><div></div><div class="h5">On Tue, Aug 24, 2010 at 8:06 AM, Almar Klein <<a href="mailto:almar.klein@gmail.com">almar.klein@gmail.com</a>> wrote:<br>
> I'm developing an IDE for Python (<a href="http://code.google.com/p/iep/" target="_blank">http://code.google.com/p/iep/</a>) that is<br>
> capable of integrating the event loop of several GUI toolkits. On a side<br>
> note, I used much code of IPython as inspiration on how to do that, so<br>
> thanks for that.<br>
><br>
> I saw in the IPython documentation that IPython users can detect whether<br>
> IPython hijacked the event loop as follows (for wx):<br>
><br>
> try:<br>
>     from IPython import appstart_wx<br>
>     appstart_wx(app)<br>
> except ImportError:<br>
>      app.MainLoop()<br>
><br>
> A very nifty feature indeed. However, building further on this, wouldn't it<br>
> be nice if people could perform this trick regardless of in which IDE or<br>
> shell the code is running? Therefore I propose to insert an object in the<br>
> GUI's module to indicate that the GUI event loop does not need to be<br>
> entered. I currently use for my IDE:<br>
><br>
> import wx<br>
> if not hasattr(wx, '_integratedEventLoop'):<br>
>     app = wx.PySimpleApp()<br>
>     app.MainLoop()<br>
><br>
> Currently, _integratedEventLoop is a string with the value 'IEP', indicating<br>
> who hijacked the main loop. I'm not sure what IPythons appstart_* function<br>
> does, but the inserted object might just as well be a function that needs to<br>
> be called (using the app instance as an argument, but how to call it for<br>
> fltk or gtk then?).<br>
><br>
> I'm interested to know what you think of this idea.<br>
<br>
</div></div>Well, Brian just implemented more or less this very same thing:<br>
<br>
<a href="http://github.com/ipython/ipython/blob/newkernel/IPython/lib/guisupport.py" target="_blank">http://github.com/ipython/ipython/blob/newkernel/IPython/lib/guisupport.py</a><br>
<br>
We decided to call the attribute '_in_event_loop' instead, partly for<br>
PEP-8 reasons but especially because Enthought was already using that<br>
name.  Absent a good reason to deviate from their chosen name, which<br>
is already in a very large codebase, we figured we'd use that.<br>
<br>
So let's hope we can get all GUI projects to agree on this approach,<br>
and it should become possible with only minimal work on the part of<br>
authors to coexist well with the event loops of various toolkits and<br>
interactive apps like IPython or IEP.<br></blockquote><div><br>Great. I was not aware of Enthought using this, so I'm happy to adopt that name instead.<br></div><div><br>Still, may I suggest the following: IPython or IEP, or any environment, could inject a function 'start_event_loop' in the module namespace of the GUI toolkit it integrates. My main argument for this, is that it would be independent of IPython or any specific library or IDE. The user can then simply call:<br>
<br>import wx<br>if hasattr(wx, 'start_event_loop'):<br>    wx.start_event_loop()<br>else:<br>    # Start the "native" way<br>    app = wx.PySimpleApp(*args, **kwargs)<br>    app.MainLoop()<br><br><br>Regards,<br>
  Almar<br><br></div></div><br>