##// END OF EJS Templates
Added a few more docs about GUI event loop integration.
Brian Granger -
Show More
@@ -8,7 +8,9 b' In [6]: %run gui-wx.py'
8
8
9 Ref: Modified from wxPython source code wxPython/samples/simple/simple.py
9 Ref: Modified from wxPython source code wxPython/samples/simple/simple.py
10
10
11 This example can only be run once in a given IPython session.
11 This example can only be run once in a given IPython session because when
12 the frame is closed, wx goes through its shutdown sequence, killing further
13 attempts. I am sure someone who knows wx can fix this issue.
12 """
14 """
13
15
14 import wx
16 import wx
@@ -1382,7 +1382,7 b' IPython has excellent support for working interactively with Graphical User'
1382 Interface (GUI) toolkits, such as wxPython, PyQt4, PyGTK and Tk. This is
1382 Interface (GUI) toolkits, such as wxPython, PyQt4, PyGTK and Tk. This is
1383 implemented using Python's builtin ``PyOSInputHook`` hook. This implementation
1383 implemented using Python's builtin ``PyOSInputHook`` hook. This implementation
1384 is extremely robust compared to our previous threaded based version. The
1384 is extremely robust compared to our previous threaded based version. The
1385 advantages of
1385 advantages of this are:
1386
1386
1387 * GUIs can be enabled and disabled dynamically at runtime.
1387 * GUIs can be enabled and disabled dynamically at runtime.
1388 * The active GUI can be switched dynamically at runtime.
1388 * The active GUI can be switched dynamically at runtime.
@@ -1399,7 +1399,7 b' With no arguments, ``%gui`` removes all GUI support. Valid ``GUINAME``'
1399 arguments are ``wx``, ``qt4``, ``gtk`` and ``tk``. The ``-a`` option will
1399 arguments are ``wx``, ``qt4``, ``gtk`` and ``tk``. The ``-a`` option will
1400 create and return a running application object for the selected GUI toolkit.
1400 create and return a running application object for the selected GUI toolkit.
1401
1401
1402 This to use wxPython interactively and create a running :class:`wx.App`
1402 Thus, to use wxPython interactively and create a running :class:`wx.App`
1403 object, do::
1403 object, do::
1404
1404
1405 %gui -a wx
1405 %gui -a wx
@@ -1408,11 +1408,38 b" For information on IPython's Matplotlib integration (and the ``pylab`` mode)"
1408 see :ref:`this section <matplotlib_support>`.
1408 see :ref:`this section <matplotlib_support>`.
1409
1409
1410 For developers that want to use IPython's GUI event loop integration in
1410 For developers that want to use IPython's GUI event loop integration in
1411 the form of a library, the capabilities are exposed in library form
1411 the form of a library, these capabilities are exposed in library form
1412 in the :mod:`IPython.lib.inputhook`. Interested developers should see the
1412 in the :mod:`IPython.lib.inputhook`. Interested developers should see the
1413 module docstrings for more information.
1413 module docstrings for more information, but there are a few points that
1414
1414 should be mentioned here.
1415 In addition, we also have a number of examples in our source directory
1415
1416 First, the ``PyOSInputHook`` approach only works in command line settings
1417 where readline is activated.
1418
1419 Second, when using the ``PyOSInputHook`` approach, a GUI application should
1420 *not* start its event loop. Instead all of this is handled by the
1421 ``PyOSInputHook``. This means that applications that are meant to be used both
1422 in IPython and as standalone apps need to have special code to detects how the
1423 application is being run. We highly recommend using IPython's
1424 :func:`appstart_` functions for this. Here is a simple example that shows the
1425 recommended code that should be at the bottom of a wxPython using GUI
1426 application::
1427
1428 try:
1429 from IPython import appstart_wx
1430 appstart_wx(app)
1431 except ImportError:
1432 app.MainLoop()
1433
1434 This pattern should be used instead of the simple ``app.MainLoop()`` code
1435 that a standalone wxPython application would have.
1436
1437 Third, unlike previous versions of IPython, we no longer "hijack" (replace
1438 them with no-ops) the event loops. This is done to allow applications that
1439 actually need to run the real event loops to do so. This is often needed to
1440 process pending events at critical points.
1441
1442 Finally, we also have a number of examples in our source directory
1416 :file:`docs/examples/lib` that demonstrate these capabilities.
1443 :file:`docs/examples/lib` that demonstrate these capabilities.
1417
1444
1418 .. _matplotlib_support:
1445 .. _matplotlib_support:
General Comments 0
You need to be logged in to leave comments. Login now