<div dir="ltr">Phil,<div><br></div>Thanks, I can confirm it works for me on linux with 6.2.2.dev2111291237.<div><br></div><div>Tom</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 29, 2021 at 7:02 AM Phil Thompson <<a href="mailto:phil@riverbankcomputing.com">phil@riverbankcomputing.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 28/11/2021 01:49, Thomas Caswell wrote:<br>
> Folks,<br>
> <br>
> There seems to have been a change in the behavior of the inputhook.<br>
> Previously, if a widget was shown, the input hook installed by pyqt <br>
> would<br>
> keep it alive and interactive while waiting for user input (either via<br>
> `input` or via the python shell).  A minimal example is:<br>
> <br>
> ```python<br>
> from PyQt6 import QtWidgets<br>
> # from PyQt5 import QtWidgets<br>
> <br>
> <br>
> app = QtWidgets.QApplication(["bob"])<br>
> b = QtWidgets.QPushButton("bob")<br>
> b.clicked.connect(lambda: print("clicked"))<br>
> b.show()<br>
> print(input("type and hit enter > "))<br>
> print(input("The window should still be open > "))<br>
> ```<br>
> <br>
> This works as expected with PyQt5, but with PyQt6 the widget is closed <br>
> as<br>
> soon as you hit enter (and if the button is created in the python shell <br>
> it<br>
> will close as you hit the first key) on linux.  I suspect osx and <br>
> windows<br>
> will have the same problem, but have not tested.<br>
<br>
It's not closing the windows, it just seems to hide them.<br>
<br>
> This happens with all versions of pyqt6 on pypi and at least python3.8 <br>
> and<br>
> py3.9.<br>
> <br>
> Looking at `static int qtcore_input_hook()` in<br>
> `sip/QtCore/qcoreapplication.sip` there appears to be no change between<br>
> PyQt5 and PyQt6.<br>
> <br>
> I suspect that the issue is Qt6 is better about closing all open <br>
> windows on<br>
> exiting the QAppliaction::exec as compared to Qt5, but I could not find <br>
> any<br>
> documentation on that (or smoking gun change in the source).<br>
> <br>
> I suspect that changing the then qtcore_input_hook to create an <br>
> QEventLoop<br>
> to exec, rather than exec'ing the main application is the solution.<br>
> However, I have not been able to test that directly and switching<br>
> IPython's input hook to exec'ing the full app did not break in the way <br>
> I<br>
> expected.<br>
<br>
A separate event loop seems to work (at least on macOS). Fixed in the <br>
next snapshot.<br>
<br>
Thanks,<br>
Phil<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Thomas Caswell<br><a href="mailto:tcaswell@gmail.com" target="_blank">tcaswell@gmail.com</a></div>