Initial commit
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
import importlib
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
import matplotlib
|
||||
from matplotlib import cbook
|
||||
from matplotlib.backend_bases import _Backend
|
||||
|
||||
_log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# NOTE: plt.switch_backend() (called at import time) will add a "backend"
|
||||
# attribute here for backcompat.
|
||||
|
||||
|
||||
def _get_running_interactive_framework():
|
||||
"""
|
||||
Return the interactive framework whose event loop is currently running, if
|
||||
any, or "headless" if no event loop can be started, or None.
|
||||
|
||||
Returns
|
||||
-------
|
||||
Optional[str]
|
||||
One of the following values: "qt5", "qt4", "gtk3", "wx", "tk",
|
||||
"macosx", "headless", ``None``.
|
||||
"""
|
||||
QtWidgets = (sys.modules.get("PyQt5.QtWidgets")
|
||||
or sys.modules.get("PySide2.QtWidgets"))
|
||||
if QtWidgets and QtWidgets.QApplication.instance():
|
||||
return "qt5"
|
||||
QtGui = (sys.modules.get("PyQt4.QtGui")
|
||||
or sys.modules.get("PySide.QtGui"))
|
||||
if QtGui and QtGui.QApplication.instance():
|
||||
return "qt4"
|
||||
Gtk = sys.modules.get("gi.repository.Gtk")
|
||||
if Gtk and Gtk.main_level():
|
||||
return "gtk3"
|
||||
wx = sys.modules.get("wx")
|
||||
if wx and wx.GetApp():
|
||||
return "wx"
|
||||
tkinter = sys.modules.get("tkinter")
|
||||
if tkinter:
|
||||
for frame in sys._current_frames().values():
|
||||
while frame:
|
||||
if frame.f_code == tkinter.mainloop.__code__:
|
||||
return "tk"
|
||||
frame = frame.f_back
|
||||
if 'matplotlib.backends._macosx' in sys.modules:
|
||||
if sys.modules["matplotlib.backends._macosx"].event_loop_is_running():
|
||||
return "macosx"
|
||||
if sys.platform.startswith("linux") and not os.environ.get("DISPLAY"):
|
||||
return "headless"
|
||||
return None
|
||||
|
||||
|
||||
@cbook.deprecated("3.0")
|
||||
def pylab_setup(name=None):
|
||||
"""
|
||||
Return new_figure_manager, draw_if_interactive and show for pyplot.
|
||||
|
||||
This provides the backend-specific functions that are used by pyplot to
|
||||
abstract away the difference between backends.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
name : str, optional
|
||||
The name of the backend to use. If `None`, falls back to
|
||||
``matplotlib.get_backend()`` (which return :rc:`backend`).
|
||||
|
||||
Returns
|
||||
-------
|
||||
backend_mod : module
|
||||
The module which contains the backend of choice
|
||||
|
||||
new_figure_manager : function
|
||||
Create a new figure manager (roughly maps to GUI window)
|
||||
|
||||
draw_if_interactive : function
|
||||
Redraw the current figure if pyplot is interactive
|
||||
|
||||
show : function
|
||||
Show (and possibly block) any unshown figures.
|
||||
"""
|
||||
# Import the requested backend into a generic module object.
|
||||
if name is None:
|
||||
name = matplotlib.get_backend()
|
||||
backend_name = (name[9:] if name.startswith("module://")
|
||||
else "matplotlib.backends.backend_{}".format(name.lower()))
|
||||
backend_mod = importlib.import_module(backend_name)
|
||||
# Create a local Backend class whose body corresponds to the contents of
|
||||
# the backend module. This allows the Backend class to fill in the missing
|
||||
# methods through inheritance.
|
||||
Backend = type("Backend", (_Backend,), vars(backend_mod))
|
||||
|
||||
# Need to keep a global reference to the backend for compatibility reasons.
|
||||
# See https://github.com/matplotlib/matplotlib/issues/6092
|
||||
global backend
|
||||
backend = name
|
||||
|
||||
_log.debug('backend %s version %s', name, Backend.backend_version)
|
||||
return (backend_mod,
|
||||
Backend.new_figure_manager,
|
||||
Backend.draw_if_interactive,
|
||||
Backend.show)
|
||||
Reference in New Issue
Block a user