MCPcopy Create free account
hub / github.com/ipython/ipython / inputhook

Function inputhook

IPython/terminal/pt_inputhooks/qt.py:11–54  ·  view source on GitHub ↗
(context)

Source from the content-addressed store, hash-verified

9
10
11def inputhook(context):
12 global _appref
13 app = QtCore.QCoreApplication.instance()
14 if not app:
15 if sys.platform == 'linux':
16 if not os.environ.get('DISPLAY') \
17 and not os.environ.get('WAYLAND_DISPLAY'):
18 import warnings
19 global _already_warned
20 if not _already_warned:
21 _already_warned = True
22 warnings.warn(
23 'The DISPLAY or WAYLAND_DISPLAY environment variable is '
24 'not set or empty and Qt5 requires this environment '
25 'variable. Deactivate Qt5 code.'
26 )
27 return
28 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
29 _appref = app = QtGui.QApplication([" "])
30 event_loop = QtCore.QEventLoop(app)
31
32 if sys.platform == 'win32':
33 # The QSocketNotifier method doesn't appear to work on Windows.
34 # Use polling instead.
35 timer = QtCore.QTimer()
36 timer.timeout.connect(event_loop.quit)
37 while not context.input_is_ready():
38 timer.start(50) # 50 ms
39 event_loop.exec_()
40 timer.stop()
41 else:
42 # On POSIX platforms, we can use a file descriptor to quit the event
43 # loop when there is input ready to read.
44 notifier = QtCore.QSocketNotifier(context.fileno(),
45 QtCore.QSocketNotifier.Read)
46 try:
47 # connect the callback we care about before we turn it on
48 notifier.activated.connect(lambda: event_loop.exit())
49 notifier.setEnabled(True)
50 # only start the event loop we are not already flipped
51 if not context.input_is_ready():
52 event_loop.exec_()
53 finally:
54 notifier.setEnabled(False)

Callers

nothing calls this directly

Calls 3

warnMethod · 0.80
stopMethod · 0.80
startMethod · 0.45

Tested by

no test coverage detected