def new_figure_manager_given_figure(cls, num, figure): """ Create a new figure manager instance for the given figure. """ with _restore_foreground_window_at_end(): if cbook._get_running_interactive_framework() is None: cbook._setup_new_guiapp() window = tk.Tk(className="matplotlib") window.withdraw() # Put a Matplotlib icon on the window rather than the default tk # icon. Tkinter doesn't allow colour icons on linux systems, but # tk>=8.5 has a iconphoto command which we call directly. See # http://mail.python.org/pipermail/tkinter-discuss/2006-November/000954.html icon_fname = str(cbook._get_data_path( 'images/matplotlib_128.ppm')) icon_img = tk.PhotoImage(file=icon_fname, master=window) try: window.iconphoto(False, icon_img) except Exception as exc: # log the failure (due e.g. to Tk version), but carry on _log.info('Could not load matplotlib icon: %s', exc) canvas = cls.FigureCanvas(figure, master=window) manager = cls.FigureManager(canvas, num, window) if mpl.is_interactive(): manager.show() canvas.draw_idle() return manager
def _create_qApp(): """ Only one qApp can exist at a time, so check before creating one. """ global qApp if qApp is None: app = QtWidgets.QApplication.instance() if app is None: # display_is_valid returns False only if on Linux and neither X11 # nor Wayland display can be opened. if not mpl._c_internal_utils.display_is_valid(): raise RuntimeError('Invalid DISPLAY variable') try: QtWidgets.QApplication.setAttribute( QtCore.Qt.AA_EnableHighDpiScaling) except AttributeError: # Attribute only exists for Qt>=5.6. pass try: QtWidgets.QApplication.setHighDpiScaleFactorRoundingPolicy( QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) except AttributeError: # Added in Qt>=5.14. pass qApp = QtWidgets.QApplication(["matplotlib"]) qApp.lastWindowClosed.connect(qApp.quit) cbook._setup_new_guiapp() else: qApp = app try: qApp.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps) except AttributeError: pass
def _create_qApp(): """ Only one qApp can exist at a time, so check before creating one. """ global qApp if qApp is None: app = QtWidgets.QApplication.instance() if app is None: # display_is_valid returns False only if on Linux and neither X11 # nor Wayland display can be opened. if not mpl._c_internal_utils.display_is_valid(): raise RuntimeError('Invalid DISPLAY variable') try: QtWidgets.QApplication.setAttribute( QtCore.Qt.AA_EnableHighDpiScaling) except AttributeError: # Only for Qt>=5.6, <6. pass # Check to make sure a QApplication from a different major version # of Qt is not instantiated in the process if QT_API in {'PyQt6', 'PySide6'}: other_bindings = ('PyQt5', 'PySide2') elif QT_API in {'PyQt5', 'PySide2'}: other_bindings = ('PyQt6', 'PySide6') else: raise RuntimeError("Should never be here") for binding in other_bindings: mod = sys.modules.get(f'{binding}.QtWidgets') if mod is not None and mod.QApplication.instance() is not None: other_core = sys.modules.get(f'{binding}.QtCore') _api.warn_external( f'Matplotlib is using {QT_API} which wraps ' f'{QtCore.qVersion()} however an instantiated ' f'QApplication from {binding} which wraps ' f'{other_core.qVersion()} exists. Mixing Qt major ' 'versions may not work as expected.') break try: QtWidgets.QApplication.setHighDpiScaleFactorRoundingPolicy( QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) except AttributeError: # Only for Qt>=5.14. pass qApp = QtWidgets.QApplication(["matplotlib"]) if sys.platform == "darwin": image = str(cbook._get_data_path('images/matplotlib.svg')) icon = QtGui.QIcon(image) qApp.setWindowIcon(icon) qApp.lastWindowClosed.connect(qApp.quit) cbook._setup_new_guiapp() else: qApp = app try: qApp.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps) # Only for Qt<6. except AttributeError: pass
def new_figure_manager(cls, num, *args, **kwargs): # Create a wx.App instance if it has not been created so far. wxapp = wx.GetApp() if wxapp is None: wxapp = wx.App(False) wxapp.SetExitOnFrameDelete(True) cbook._setup_new_guiapp() # Retain a reference to the app object so that it does not get # garbage collected. _BackendWx._theWxApp = wxapp return super().new_figure_manager(num, *args, **kwargs)
def new_figure_manager_given_figure(cls, num, figure): # Create a wx.App instance if it has not been created so far. wxapp = wx.GetApp() if wxapp is None: wxapp = wx.App() wxapp.SetExitOnFrameDelete(True) cbook._setup_new_guiapp() # Retain a reference to the app object so that it does not get # garbage collected. _BackendWx._theWxApp = wxapp # Attaches figure.canvas, figure.canvas.manager. frame = FigureFrameWx(num, figure, canvas_class=cls.FigureCanvas) if mpl.is_interactive(): frame.Show() figure.canvas.draw_idle() return figure.canvas.manager
def _create_qApp(): """ Only one qApp can exist at a time, so check before creating one. """ global qApp if qApp is None: app = QtWidgets.QApplication.instance() if app is None: # check for DISPLAY env variable on X11 build of Qt if QtCore.qVersion() >= "5.": try: importlib.import_module( # i.e. PyQt5.QtX11Extras or PySide2.QtX11Extras. f"{QtWidgets.__package__}.QtX11Extras") is_x11_build = True except ImportError: is_x11_build = False else: is_x11_build = hasattr(QtGui, "QX11Info") if is_x11_build and not mpl._c_internal_utils.display_is_valid(): raise RuntimeError('Invalid DISPLAY variable') try: QtWidgets.QApplication.setAttribute( QtCore.Qt.AA_EnableHighDpiScaling) except AttributeError: # Attribute only exists for Qt>=5.6. pass try: QtWidgets.QApplication.setHighDpiScaleFactorRoundingPolicy( QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) except AttributeError: # Added in Qt>=5.14. pass qApp = QtWidgets.QApplication(["matplotlib"]) qApp.lastWindowClosed.connect(qApp.quit) cbook._setup_new_guiapp() else: qApp = app try: qApp.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps) except AttributeError: pass
def _create_application(): global _application if _application is None: app = Gio.Application.get_default() if app is None or getattr(app, '_created_by_matplotlib'): # display_is_valid returns False only if on Linux and neither X11 # nor Wayland display can be opened. if not mpl._c_internal_utils.display_is_valid(): raise RuntimeError('Invalid DISPLAY variable') _application = Gtk.Application.new('org.matplotlib.Matplotlib3', Gio.ApplicationFlags.NON_UNIQUE) # The activate signal must be connected, but we don't care for # handling it, since we don't do any remote processing. _application.connect('activate', lambda *args, **kwargs: None) _application.connect('shutdown', _shutdown_application) _application.register() cbook._setup_new_guiapp() else: _application = app
def _create_qApp(): """ Only one qApp can exist at a time, so check before creating one. """ global qApp if qApp is None: app = QtWidgets.QApplication.instance() if app is None: # check for DISPLAY env variable on X11 build of Qt if QtCore.qVersion() >= "5.": try: importlib.import_module( # i.e. PyQt5.QtX11Extras or PySide2.QtX11Extras. f"{QtWidgets.__package__}.QtX11Extras") is_x11_build = True except ImportError: is_x11_build = False else: is_x11_build = hasattr(QtGui, "QX11Info") if is_x11_build: display = os.environ.get('DISPLAY') if display is None or not re.search(r':\d', display): raise RuntimeError('Invalid DISPLAY variable') try: QtWidgets.QApplication.setAttribute( QtCore.Qt.AA_EnableHighDpiScaling) except AttributeError: # Attribute only exists for Qt>=5.6. pass qApp = QtWidgets.QApplication(["matplotlib"]) qApp.lastWindowClosed.connect(qApp.quit) cbook._setup_new_guiapp() else: qApp = app try: qApp.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps) except AttributeError: pass
def new_figure_manager_given_figure(cls, num, figure): """ Create a new figure manager instance for the given figure. """ with _restore_foreground_window_at_end(): if cbook._get_running_interactive_framework() is None: cbook._setup_new_guiapp() _c_internal_utils.Win32_SetProcessDpiAwareness_max() window = tk.Tk(className="matplotlib") window.withdraw() # Put a Matplotlib icon on the window rather than the default tk # icon. See https://www.tcl.tk/man/tcl/TkCmd/wm.html#M50 # # `ImageTk` can be replaced with `tk` whenever the minimum # supported Tk version is increased to 8.6, as Tk 8.6+ natively # supports PNG images. icon_fname = str(cbook._get_data_path( 'images/matplotlib.png')) icon_img = ImageTk.PhotoImage(file=icon_fname, master=window) icon_fname_large = str(cbook._get_data_path( 'images/matplotlib_large.png')) icon_img_large = ImageTk.PhotoImage( file=icon_fname_large, master=window) try: window.iconphoto(False, icon_img_large, icon_img) except Exception as exc: # log the failure (due e.g. to Tk version), but carry on _log.info('Could not load matplotlib icon: %s', exc) canvas = cls.FigureCanvas(figure, master=window) manager = cls.FigureManager(canvas, num, window) if mpl.is_interactive(): manager.show() canvas.draw_idle() return manager
def mainloop(): if Gtk.main_level() == 0: cbook._setup_new_guiapp() Gtk.main()
def _create_wxapp(): wxapp = wx.App(False) wxapp.SetExitOnFrameDelete(True) cbook._setup_new_guiapp() return wxapp