From 5c222dfe49dbb9e760e09150fef3d4c01783e3bb Mon Sep 17 00:00:00 2001 From: Julien Schueller Date: Mon, 15 Apr 2013 09:15:23 +0200 Subject: [PATCH 1/4] Prevented Qt4 from stopping the interpreter. --- lib/matplotlib/backends/backend_qt4.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/matplotlib/backends/backend_qt4.py b/lib/matplotlib/backends/backend_qt4.py index 3caad0bf90c1..1f0fc24ef8be 100644 --- a/lib/matplotlib/backends/backend_qt4.py +++ b/lib/matplotlib/backends/backend_qt4.py @@ -23,6 +23,8 @@ from qt4_compat import QtCore, QtGui, _getSaveFileName, __version__ +import subprocess + backend_version = __version__ def fn_name(): return sys._getframe(1).f_code.co_name @@ -53,6 +55,15 @@ def _create_qApp(): global qApp app = QtGui.QApplication.instance() if app is None: + + # try to launch a QApplication in a separate process + # otherwise it may stop the intepreter on failure (if no X server for example) + p = subprocess.Popen(sys.executable, stdin=subprocess.PIPE, stderr=subprocess.PIPE) + p.stdin.write('from matplotlib.backends.qt4_compat import QtGui\napp = QtGui.QApplication([])\n') + p.stdin.close() + if p.wait() != 0: + raise RuntimeError( 'Qt4 failed to initialize ' + p.stderr.readline().rstrip() ) + qApp = QtGui.QApplication( [" "] ) QtCore.QObject.connect( qApp, QtCore.SIGNAL( "lastWindowClosed()" ), qApp, QtCore.SLOT( "quit()" ) ) From 9bed01614814b2bc76d32110e1c6a3f9aa773971 Mon Sep 17 00:00:00 2001 From: Julien Schueller Date: Tue, 16 Apr 2013 08:48:48 +0200 Subject: [PATCH 2/4] Just check DISPLAY env var --- lib/matplotlib/backends/backend_qt4.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/matplotlib/backends/backend_qt4.py b/lib/matplotlib/backends/backend_qt4.py index 1f0fc24ef8be..9d62dff8e6a3 100644 --- a/lib/matplotlib/backends/backend_qt4.py +++ b/lib/matplotlib/backends/backend_qt4.py @@ -56,14 +56,12 @@ def _create_qApp(): app = QtGui.QApplication.instance() if app is None: - # try to launch a QApplication in a separate process - # otherwise it may stop the intepreter on failure (if no X server for example) - p = subprocess.Popen(sys.executable, stdin=subprocess.PIPE, stderr=subprocess.PIPE) - p.stdin.write('from matplotlib.backends.qt4_compat import QtGui\napp = QtGui.QApplication([])\n') - p.stdin.close() - if p.wait() != 0: - raise RuntimeError( 'Qt4 failed to initialize ' + p.stderr.readline().rstrip() ) - + # check for DISPLAY env variable + if sys.platform.startswith('linux'): + display = os.environ.get('DISPLAY') + if (display is None) or (not ':' in display.strip()): + raise RuntimeError('Invalid DISPLAY variable') + qApp = QtGui.QApplication( [" "] ) QtCore.QObject.connect( qApp, QtCore.SIGNAL( "lastWindowClosed()" ), qApp, QtCore.SLOT( "quit()" ) ) From 1cbce7d574282a9dc9041f4b71fc4b561edd7382 Mon Sep 17 00:00:00 2001 From: Julien Schueller Date: Wed, 17 Apr 2013 18:00:08 +0200 Subject: [PATCH 3/4] Check for a X11 build of Qt --- lib/matplotlib/backends/backend_qt4.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/matplotlib/backends/backend_qt4.py b/lib/matplotlib/backends/backend_qt4.py index 9d62dff8e6a3..781cc0679dac 100644 --- a/lib/matplotlib/backends/backend_qt4.py +++ b/lib/matplotlib/backends/backend_qt4.py @@ -23,8 +23,6 @@ from qt4_compat import QtCore, QtGui, _getSaveFileName, __version__ -import subprocess - backend_version = __version__ def fn_name(): return sys._getframe(1).f_code.co_name @@ -56,10 +54,10 @@ def _create_qApp(): app = QtGui.QApplication.instance() if app is None: - # check for DISPLAY env variable - if sys.platform.startswith('linux'): + # check for DISPLAY env variable on X11 build of Qt + if hasattr(QtGui, "QX11Info"): display = os.environ.get('DISPLAY') - if (display is None) or (not ':' in display.strip()): + if (display is None) or (not ':' in display): raise RuntimeError('Invalid DISPLAY variable') qApp = QtGui.QApplication( [" "] ) From 48e5bb18b9fb37f3f99e494a66037df85716d63d Mon Sep 17 00:00:00 2001 From: jschueller Date: Wed, 17 Apr 2013 19:00:03 +0200 Subject: [PATCH 4/4] Using a regex to check DISPLAY --- lib/matplotlib/backends/backend_qt4.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/backends/backend_qt4.py b/lib/matplotlib/backends/backend_qt4.py index 781cc0679dac..53b7210489d2 100644 --- a/lib/matplotlib/backends/backend_qt4.py +++ b/lib/matplotlib/backends/backend_qt4.py @@ -1,6 +1,7 @@ from __future__ import division, print_function import math import os +import re import signal import sys @@ -57,7 +58,7 @@ def _create_qApp(): # check for DISPLAY env variable on X11 build of Qt if hasattr(QtGui, "QX11Info"): display = os.environ.get('DISPLAY') - if (display is None) or (not ':' in display): + if display is None or not re.search(':\d', display): raise RuntimeError('Invalid DISPLAY variable') qApp = QtGui.QApplication( [" "] )