The programming style imposed by PyQt (before version 4.3) and other GUI toolkit wrappers is to create an application instance with some widgets and to enter an event loop that locks you from the Python command line interpreter.
The iqt module enables you to:
When Python has the GNU readline module, the iqt module works by hooking qApp->processEvents() on the event hook of the readline module. The GNU readline library closes the event loop by calling qApp->processEvent() at a maximum rate of 10 times per second while reading your keyboard input.
When Python does not have the GNU readline module, the iqt module uses the techniques suggested on the PyQt mailing list.
To see how the iqt works, play with ICompass.py by running
python -i ICompass.py
python ICompass.py
ipython ICompass.py
My .pythonrc.py file loads the modules readline, rlcompleter and iqt. Then, it configures readline for tab-completion and history saving and cleans up the global namespace. Finally, it loads the modules Qwt5, Qt, numpy, and scipy, while setting up the help system for scipy:
# Set your PYTHONSTARTUP environment variable to $HOME/.pythonrc.py
#
# inspired by:
# http://opag.ca/wiki/OpagCode/OpagSnippets
from atexit import register
from os import path
import readline
import rlcompleter
# Sets up a tab for completion (use a single space to indent Python code).
readline.parse_and_bind('tab: complete')
historyPath = path.expanduser(' /.python_history')
readline.set_history_length(1000)
# Reads the history of the previous session, if it exists.
if path.exists(historyPath):
readline.read_history_file(historyPath)
# Sets up history saving on exit.
def save_history(historyPath=historyPath, readline=readline):
readline.write_history_file(historyPath)
register(save_history)
# Cleans up the global name space.
del register, path, readline, rlcompleter, historyPath, save_history
# Tries to make the PyQt and PyQwt widgets usable from the command line.
try:
import PyQt4.Qwt5.iqt
del PyQt4.Qwt5.iqt
except ImportError:
pass
# Tries to import PyQt and Qwt.
try:
import PyQt4.Qwt5 as Qwt
import PyQt4.Qt as Qt
except ImportError:
pass
# Sets up the SciPy help for tab completion: help(sp.optimize.leastsq).
try:
import numpy as np
import scipy as sp
sp.pkgload()
except ImportError:
pass
# Local Variables: ***
# mode: python ***
# End: ***