From 6aa0cbcd94c9a2118494a50f80ad88c578d6b284 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Wed, 30 Aug 2023 18:17:29 +0200 Subject: [PATCH] Don't call QApplication.setQuitOnLastWindowClosed(False). That setting previously caused `plt.plot(); print("pre"); plt.show(block=True); print("post")` to block after the `show()` call *even* after closing the Matplotlib figure window ("post" was never printed). The new behavior (printing "post" after the window is closed) is consistent with plain IPython. The setQuitOnLastWindowClosed call came in (with no additional explanation) in the very first commit implementing qt support (bec2d41, in 2010) and seems to have never been touched since then. --- ipykernel/eventloops.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ipykernel/eventloops.py b/ipykernel/eventloops.py index 3230d6a65..4082f4cf7 100644 --- a/ipykernel/eventloops.py +++ b/ipykernel/eventloops.py @@ -535,13 +535,10 @@ def make_qt_app_for_kernel(gui, kernel): set_qt_api_env_from_gui(gui) # This import is guaranteed to work now: - from IPython.external.qt_for_kernel import QtCore, QtGui + from IPython.external.qt_for_kernel import QtCore from IPython.lib.guisupport import get_app_qt4 kernel.app = get_app_qt4([" "]) - if isinstance(kernel.app, QtGui.QApplication): - kernel.app.setQuitOnLastWindowClosed(False) - kernel.app.qt_event_loop = QtCore.QEventLoop(kernel.app)