##// END OF EJS Templates
fix runnign on 3.7
fix runnign on 3.7

File last commit:

r23367:c1bfa9c7
r24468:5ea200eb
Show More
qt.py
35 lines | 1.3 KiB | text/x-python | PythonLexer
Thomas Kluyver
Try to fix Qt event loop, take III...
r22654 import sys
Thomas Kluyver
Write & borrow some inputhooks for prompt_toolkit
r21934 from IPython.external.qt_for_kernel import QtCore, QtGui
Thomas Kluyver
Create a QApplication for inputhook if one doesn't already exist...
r22707 # If we create a QApplication, keep a reference to it so that it doesn't get
# garbage collected.
_appref = None
Thomas A Caswell
FIX: re-order qt eventloop hook a bit...
r23367
Thomas Kluyver
Write & borrow some inputhooks for prompt_toolkit
r21934 def inputhook(context):
Thomas Kluyver
Create a QApplication for inputhook if one doesn't already exist...
r22707 global _appref
Thomas Kluyver
Write & borrow some inputhooks for prompt_toolkit
r21934 app = QtCore.QCoreApplication.instance()
if not app:
Thomas Kluyver
Create a QApplication for inputhook if one doesn't already exist...
r22707 _appref = app = QtGui.QApplication([" "])
Thomas Kluyver
Write & borrow some inputhooks for prompt_toolkit
r21934 event_loop = QtCore.QEventLoop(app)
Thomas Kluyver
Try to fix Qt event loop, take III...
r22654
if sys.platform == 'win32':
# The QSocketNotifier method doesn't appear to work on Windows.
# Use polling instead.
timer = QtCore.QTimer()
timer.timeout.connect(event_loop.quit)
while not context.input_is_ready():
timer.start(50) # 50 ms
event_loop.exec_()
timer.stop()
else:
# On POSIX platforms, we can use a file descriptor to quit the event
# loop when there is input ready to read.
Thomas A Caswell
FIX: re-order qt eventloop hook a bit...
r23367 notifier = QtCore.QSocketNotifier(context.fileno(),
QtCore.QSocketNotifier.Read)
# connect the callback we care about before we turn it on
Thomas Kluyver
Try to fix Qt event loop, take III...
r22654 notifier.activated.connect(event_loop.exit)
Thomas A Caswell
FIX: re-order qt eventloop hook a bit...
r23367 notifier.setEnabled(True)
# only start the event loop we are not already flipped
if not context.input_is_ready():
event_loop.exec_()