Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
ipykernel/examples/embedding/ipkernel_qtapp.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
executable file
78 lines (59 sloc)
2.84 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
"""Example integrating an IPython kernel into a GUI App. | |
This trivial GUI application internally starts an IPython kernel, to which Qt | |
consoles can be connected either by the user at the command line or started | |
from the GUI itself, via a button. The GUI can also manipulate one variable in | |
the kernel's namespace, and print the namespace to the console. | |
Play with it by running the script and then opening one or more consoles, and | |
pushing the 'Counter++' and 'Namespace' buttons. | |
Upon exit, it should automatically close all consoles opened from the GUI. | |
Consoles attached separately from a terminal will not be terminated, though | |
they will notice that their kernel died. | |
""" | |
# ----------------------------------------------------------------------------- | |
# Imports | |
# ----------------------------------------------------------------------------- | |
from internal_ipkernel import InternalIPKernel | |
from PyQt4 import Qt | |
# ----------------------------------------------------------------------------- | |
# Functions and classes | |
# ----------------------------------------------------------------------------- | |
class SimpleWindow(Qt.QWidget, InternalIPKernel): | |
"""A custom Qt widget for IPykernel.""" | |
def __init__(self, app): | |
"""Initialize the widget.""" | |
Qt.QWidget.__init__(self) | |
self.app = app | |
self.add_widgets() | |
self.init_ipkernel("qt") | |
def add_widgets(self): | |
"""Add the widget.""" | |
self.setGeometry(300, 300, 400, 70) | |
self.setWindowTitle("IPython in your app") | |
# Add simple buttons: | |
console = Qt.QPushButton("Qt Console", self) | |
console.setGeometry(10, 10, 100, 35) | |
self.connect(console, Qt.SIGNAL("clicked()"), self.new_qt_console) | |
namespace = Qt.QPushButton("Namespace", self) | |
namespace.setGeometry(120, 10, 100, 35) | |
self.connect(namespace, Qt.SIGNAL("clicked()"), self.print_namespace) | |
count = Qt.QPushButton("Count++", self) | |
count.setGeometry(230, 10, 80, 35) | |
self.connect(count, Qt.SIGNAL("clicked()"), self.count) | |
# Quit and cleanup | |
quit = Qt.QPushButton("Quit", self) | |
quit.setGeometry(320, 10, 60, 35) | |
self.connect(quit, Qt.SIGNAL("clicked()"), Qt.qApp, Qt.SLOT("quit()")) | |
self.app.connect(self.app, Qt.SIGNAL("lastWindowClosed()"), self.app, Qt.SLOT("quit()")) | |
self.app.aboutToQuit.connect(self.cleanup_consoles) | |
# ----------------------------------------------------------------------------- | |
# Main script | |
# ----------------------------------------------------------------------------- | |
if __name__ == "__main__": | |
app = Qt.QApplication([]) | |
# Create our window | |
win = SimpleWindow(app) | |
win.show() | |
# Very important, IPython-specific step: this gets GUI event loop | |
# integration going, and it replaces calling app.exec_() | |
win.ipkernel.start() |