From: <jd...@us...> - 2008-07-21 09:51:40
|
Revision: 5798 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5798&view=rev Author: jdh2358 Date: 2008-07-21 09:50:36 +0000 (Mon, 21 Jul 2008) Log Message: ----------- Added Gael's backend fallback patch Modified Paths: -------------- trunk/matplotlib/examples/pylab_examples/scatter_demo.py trunk/matplotlib/lib/matplotlib/backends/__init__.py trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py trunk/matplotlib/lib/matplotlib/pyplot.py trunk/matplotlib/lib/matplotlib/rcsetup.py trunk/matplotlib/matplotlibrc.template Modified: trunk/matplotlib/examples/pylab_examples/scatter_demo.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/scatter_demo.py 2008-07-21 00:22:19 UTC (rev 5797) +++ trunk/matplotlib/examples/pylab_examples/scatter_demo.py 2008-07-21 09:50:36 UTC (rev 5798) @@ -6,5 +6,6 @@ y = 0.9*rand(N) area = pi*(10 * rand(N))**2 # 0 to 10 point radiuses scatter(x,y,s=area, marker='^', c='r') - +savefig('test.ps') +savefig('test.pdf') show() Modified: trunk/matplotlib/lib/matplotlib/backends/__init__.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/__init__.py 2008-07-21 00:22:19 UTC (rev 5797) +++ trunk/matplotlib/lib/matplotlib/backends/__init__.py 2008-07-21 09:50:36 UTC (rev 5798) @@ -23,7 +23,9 @@ # Things we pull in from all backends new_figure_manager = backend_mod.new_figure_manager - + # image backends like pdf, agg or svg do not need to do anything + # for "show" or "draw_if_interactive", so if they are not defined + # by the backend, just do nothing def do_nothing(*args, **kwargs): pass backend_version = getattr(backend_mod,'backend_version', 'unknown') show = getattr(backend_mod, 'show', do_nothing) Modified: trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py 2008-07-21 00:22:19 UTC (rev 5797) +++ trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py 2008-07-21 09:50:36 UTC (rev 5798) @@ -67,7 +67,8 @@ for manager in Gcf.get_all_fig_managers(): manager.window.show() - if mainloop and gtk.main_level() == 0: + if mainloop and gtk.main_level() == 0 and \ + len(Gcf.get_all_fig_managers())>0: gtk.main() def new_figure_manager(num, *args, **kwargs): Modified: trunk/matplotlib/lib/matplotlib/pyplot.py =================================================================== --- trunk/matplotlib/lib/matplotlib/pyplot.py 2008-07-21 00:22:19 UTC (rev 5797) +++ trunk/matplotlib/lib/matplotlib/pyplot.py 2008-07-21 09:50:36 UTC (rev 5798) @@ -1,12 +1,13 @@ import sys import matplotlib -from matplotlib import _pylab_helpers +from matplotlib import _pylab_helpers, interactive from matplotlib.cbook import dedent, silent_list, is_string_like, is_numlike from matplotlib.figure import Figure, figaspect from matplotlib.backend_bases import FigureCanvasBase from matplotlib.image import imread as _imread from matplotlib import rcParams, rcParamsDefault, get_backend +from matplotlib.rcsetup import interactive_bk as _interactive_bk from matplotlib.artist import getp, get, Artist from matplotlib.artist import setp as _setp from matplotlib.axes import Axes @@ -32,7 +33,42 @@ MaxNLocator +## Backend detection ## +def _backend_selection(): + """ If rcParams['backend_fallback'] is true, check to see if the + current backend is compatible with the current running event + loop, and if not switches to a compatible one. + """ + backend = rcParams['backend'] + if not rcParams['backend_fallback'] or \ + backend not in _interactive_bk: + return + is_agg_backend = rcParams['backend'].endswith('Agg') + if 'wx' in sys.modules and not backend in ('WX', 'WXAgg'): + import wx + if wx.App.IsMainLoopRunning(): + rcParams['backend'] = 'wx' + 'Agg' * is_agg_backend + elif 'qt' in sys.modules and not backend == 'QtAgg': + import qt + if not qt.qApp.startingUp(): + # The mainloop is running. + rcParams['backend'] = 'qtAgg' + elif 'PyQt4.QtCore' in sys.modules and not backend == 'Qt4Agg': + import PyQt4.QtGui + if not PyQt4.QtGui.qApp.startingUp(): + # The mainloop is running. + rcParams['backend'] = 'qt4Agg' + elif 'gtk' in sys.modules and not backend in ('GTK', 'GTKAgg', + 'GTKCairo'): + import gobject + if gobject.MainLoop().is_running(): + rcParams['backend'] = 'gtk' + 'Agg' * is_agg_backend + elif 'Tkinter' in sys.modules and not backend == 'TkAgg': + #import Tkinter + pass #what if anything do we need to do for tkinter? +_backend_selection() + ## Global ## from matplotlib.backends import pylab_setup Modified: trunk/matplotlib/lib/matplotlib/rcsetup.py =================================================================== --- trunk/matplotlib/lib/matplotlib/rcsetup.py 2008-07-21 00:22:19 UTC (rev 5797) +++ trunk/matplotlib/lib/matplotlib/rcsetup.py 2008-07-21 09:50:36 UTC (rev 5798) @@ -305,6 +305,7 @@ # a map from key -> value, converter defaultParams = { 'backend' : ['Agg', validate_backend], # agg is certainly present + 'backend_fallback' : [True, validate_bool], # agg is certainly present 'numerix' : ['numpy', validate_numerix], 'maskedarray' : [False, validate_bool], 'toolbar' : ['toolbar2', validate_toolbar], Modified: trunk/matplotlib/matplotlibrc.template =================================================================== --- trunk/matplotlib/matplotlibrc.template 2008-07-21 00:22:19 UTC (rev 5797) +++ trunk/matplotlib/matplotlibrc.template 2008-07-21 09:50:36 UTC (rev 5798) @@ -26,6 +26,11 @@ # to the module name (which must be in the PYTHONPATH) as # 'module://my_backend' backend : %(backend)s + +# if you are runing pyplot inside a GUI and your backend choice +# conflicts, we will automatically try and find a compatible one for +# you if backend_fallback is True +#backend_fallback: True numerix : %(numerix)s # numpy, Numeric or numarray #maskedarray : False # True to use external maskedarray module # instead of numpy.ma; this is a temporary This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |