##// END OF EJS Templates
Backport PR #5458: Add support for PyQt5....
Backport PR #5458: Add support for PyQt5. This PR adds the new `QT_API_PYQT5` to `IPython/external/qt_loaders.py ` and allows to embed the IPython console in Qt5 Applications. In case of PyQt5, the loader returns a union of `PyQt5.QtGui` and `PyQt5.QtWidgets` acting as a Qt4-QtGui compatibility module. One small fix to `InProcessChannel.__init__` was necessary though. For some reason, when constructing `QtInProcessShellChannel`, the `QtCore.QObject.__init__` initializer from `SuperQObject` indirectly calls the `InProcessChannel.__init__` function, which doesn't have a default constructor and thus fails. I assume this has something to do with the metaclass/multiple inheritance approach IPython uses on QObject. Adding a default value for `client` in `InProcessChannel.__init__` solved the problem for me.

File last commit:

r11009:e16cf2f8
r18784:3b30bb89
Show More
client.py
37 lines | 968 B | text/x-python | PythonLexer
""" Defines a KernelClient that provides signals and slots.
"""
# Local imports
from IPython.utils.traitlets import Type
from IPython.kernel.channels import (
ShellChannel, IOPubChannel, StdInChannel, HBChannel
)
from IPython.kernel import KernelClient
from .kernel_mixins import (
QtShellChannelMixin, QtIOPubChannelMixin,
QtStdInChannelMixin, QtHBChannelMixin,
QtKernelClientMixin
)
class QtShellChannel(QtShellChannelMixin, ShellChannel):
pass
class QtIOPubChannel(QtIOPubChannelMixin, IOPubChannel):
pass
class QtStdInChannel(QtStdInChannelMixin, StdInChannel):
pass
class QtHBChannel(QtHBChannelMixin, HBChannel):
pass
class QtKernelClient(QtKernelClientMixin, KernelClient):
""" A KernelClient that provides signals and slots.
"""
iopub_channel_class = Type(QtIOPubChannel)
shell_channel_class = Type(QtShellChannel)
stdin_channel_class = Type(QtStdInChannel)
hb_channel_class = Type(QtHBChannel)