示例#1
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.textEdit = QtGui.QTextEdit()

        but1 = QtGui.QPushButton('write')
        but1.clicked.connect(self.but_write)

        but2 = QtGui.QPushButton('read')
        but2.clicked.connect(self.but_read)

        self.a = {'text': ''}
        self.console = EmbedIPython(testing=123, a=self.a)
        print "type( console)", type(self.console)
        #self.console.kernel.shell.run_cell('%pylab qt')

        vbox = QtGui.QVBoxLayout()
        hbox = QtGui.QHBoxLayout()
        vbox.addWidget(self.textEdit)
        vbox.addWidget(self.console)
        hbox.addWidget(but1)
        hbox.addWidget(but2)
        vbox.addLayout(hbox)

        b = QtGui.QWidget()
        b.setLayout(vbox)
        self.setCentralWidget(b)
示例#2
0
    def __init__(self, name, parent):
        super(MagicHelper, self).__init__(name, parent)

        self.data = None

        class MinListWidget(QtGui.QListWidget):
            """Temp class to overide the default QListWidget size hint
               in order to make MagicHelper narrow
            """
            def sizeHint(self):
                s = QtCore.QSize()
                s.setHeight(super(MinListWidget, self).sizeHint().height())
                s.setWidth(self.sizeHintForColumn(0))
                return s

        # construct content
        self.frame = QtGui.QFrame()
        self.search_label = QtGui.QLabel("Search:")
        self.search_line = QtGui.QLineEdit()
        self.search_class = QtGui.QComboBox()
        self.search_list = MinListWidget()
        self.paste_button = QtGui.QPushButton("Paste")
        self.run_button = QtGui.QPushButton("Run")

        # layout all the widgets
        main_layout = QtGui.QVBoxLayout()
        search_layout = QtGui.QHBoxLayout()
        search_layout.addWidget(self.search_label)
        search_layout.addWidget(self.search_line, 10)
        main_layout.addLayout(search_layout)
        main_layout.addWidget(self.search_class)
        main_layout.addWidget(self.search_list, 10)
        action_layout = QtGui.QHBoxLayout()
        action_layout.addWidget(self.paste_button)
        action_layout.addWidget(self.run_button)
        main_layout.addLayout(action_layout)

        self.frame.setLayout(main_layout)
        self.setWidget(self.frame)

        # connect all the relevant signals to handlers
        self.visibilityChanged[bool].connect(self._update_magic_helper)
        self.search_class.activated[int].connect(self.class_selected)
        self.search_line.textChanged[str].connect(self.search_changed)
        self.search_list.itemDoubleClicked[QtGui.QListWidgetItem].connect(
            self.paste_requested)
        self.paste_button.clicked[bool].connect(self.paste_requested)
        self.run_button.clicked[bool].connect(self.run_requested)
    def __init__(self, parent=None):

        super(ImportDialog, self).__init__(parent)

        from globusonline.catalog.client.examples.catalog_wrapper import CatalogWrapper
        token_file = os.path.join(os.path.expanduser('~'), '.nexpy',
                                  'globusonline', 'gotoken.txt')
        self.wrap = CatalogWrapper(token='file', token_file=token_file)
        _, self.catalogs = self.wrap.catalogClient.get_catalogs()
        catalog_layout = QtGui.QHBoxLayout()
        self.catalog_box = QtGui.QComboBox()
        for catalog in self.catalogs:
            try:
                self.catalog_box.addItem(catalog['config']['name'])
            except:
                pass
        self.catalog_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
        catalog_button = QtGui.QPushButton("Choose Catalog")
        catalog_button.clicked.connect(self.get_catalog)
        catalog_layout.addWidget(self.catalog_box)
        catalog_layout.addWidget(catalog_button)
        self.layout = QtGui.QVBoxLayout()
        self.layout.addLayout(catalog_layout)
        self.layout.addWidget(self.close_buttons())
        self.setLayout(self.layout)

        self.setWindowTitle("Import " + str(filetype))
 def get_dataset(self):
     self.dataset_id = self.get_dataset_id(self.dataset_box.currentText())
     _, self.members = self.wrap.catalogClient.get_members(
         self.catalog_id, self.dataset_id)
     member_layout = QtGui.QHBoxLayout()
     self.member_box = QtGui.QComboBox()
     for member in self.members:
         try:
             self.member_box.addItem(member['data_uri'])
         except:
             pass
     self.member_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
     member_button = QtGui.QPushButton("Choose Member")
     member_button.clicked.connect(self.get_member)
     member_layout.addWidget(self.member_box)
     member_layout.addWidget(member_button)
     self.layout.insertLayout(2, member_layout)
 def get_catalog(self):
     self.catalog_id = self.get_catalog_id(self.catalog_box.currentText())
     _, self.datasets = self.wrap.catalogClient.get_datasets(
         self.catalog_id)
     dataset_layout = QtGui.QHBoxLayout()
     self.dataset_box = QtGui.QComboBox()
     for dataset in self.datasets:
         try:
             self.dataset_box.addItem(dataset['name'])
         except:
             pass
     self.dataset_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
     dataset_button = QtGui.QPushButton("Choose Dataset")
     dataset_button.clicked.connect(self.get_dataset)
     dataset_layout.addWidget(self.dataset_box)
     dataset_layout.addWidget(dataset_button)
     self.layout.insertLayout(1, dataset_layout)
示例#6
0
 def closeEvent(self, event):
     """ Forward the close event to every tabs contained by the windows
     """
     if self.tab_widget.count() == 0:
         # no tabs, just close
         event.accept()
         return
     # Do Not loop on the widget count as it change while closing
     title = self.window().windowTitle()
     cancel = QtGui.QMessageBox.Cancel
     okay = QtGui.QMessageBox.Ok
     accept_role = QtGui.QMessageBox.AcceptRole
     
     if self.confirm_exit:
         if self.tab_widget.count() > 1:
             msg = "Close all tabs, stop all kernels, and Quit?"
         else:
             msg = "Close console, stop kernel, and Quit?"
         info = "Kernels not started here (e.g. notebooks) will be left alone."
         closeall = QtGui.QPushButton("&Quit", self)
         closeall.setShortcut('Q')
         box = QtGui.QMessageBox(QtGui.QMessageBox.Question,
                                 title, msg)
         box.setInformativeText(info)
         box.addButton(cancel)
         box.addButton(closeall, QtGui.QMessageBox.YesRole)
         box.setDefaultButton(closeall)
         box.setEscapeButton(cancel)
         pixmap = QtGui.QPixmap(self._app.icon.pixmap(QtCore.QSize(64,64)))
         box.setIconPixmap(pixmap)
         reply = box.exec_()
     else:
         reply = okay
     
     if reply == cancel:
         event.ignore()
         return
     if reply == okay or reply == accept_role:
         while self.tab_widget.count() >= 1:
             # prevent further confirmations:
             widget = self.active_frontend
             widget._confirm_exit = False
             self.close_tab(widget)
         event.accept()
    def close_tab(self, current_tab):
        """ Called when you need to try to close a tab.

        It takes the number of the tab to be closed as argument, or a reference
        to the widget inside this tab
        """

        # let's be sure "tab" and "closing widget" are respectively the index
        # of the tab to close and a reference to the frontend to close
        if type(current_tab) is not int:
            current_tab = self.tab_widget.indexOf(current_tab)
        closing_widget = self.tab_widget.widget(current_tab)

        # when trying to be closed, widget might re-send a request to be
        # closed again, but will be deleted when event will be processed. So
        # need to check that widget still exists and skip if not. One example
        # of this is when 'exit' is sent in a slave tab. 'exit' will be
        # re-sent by this function on the master widget, which ask all slave
        # widgets to exit
        if closing_widget == None:
            return

        #get a list of all slave widgets on the same kernel.
        slave_tabs = self.find_slave_widgets(closing_widget)

        keepkernel = None  #Use the prompt by default
        if hasattr(closing_widget, '_keep_kernel_on_exit'):  #set by exit magic
            keepkernel = closing_widget._keep_kernel_on_exit
            # If signal sent by exit magic (_keep_kernel_on_exit, exist and not None)
            # we set local slave tabs._hidden to True to avoid prompting for kernel
            # restart when they get the signal. and then "forward" the 'exit'
            # to the main window
            if keepkernel is not None:
                for tab in slave_tabs:
                    tab._hidden = True
                if closing_widget in slave_tabs:
                    try:
                        self.find_master_tab(closing_widget).execute('exit')
                    except AttributeError:
                        self.log.info(
                            "Master already closed or not local, closing only current tab"
                        )
                        self.tab_widget.removeTab(current_tab)
                    self.update_tab_bar_visibility()
                    return

        kernel_manager = closing_widget.kernel_manager

        if keepkernel is None and not closing_widget._confirm_exit:
            # don't prompt, just terminate the kernel if we own it
            # or leave it alone if we don't
            keepkernel = closing_widget._existing
        if keepkernel is None:  #show prompt
            if kernel_manager and kernel_manager.channels_running:
                title = self.window().windowTitle()
                cancel = QtGui.QMessageBox.Cancel
                okay = QtGui.QMessageBox.Ok
                if closing_widget._may_close:
                    msg = "You are closing the tab : " + '"' + self.tab_widget.tabText(
                        current_tab) + '"'
                    info = "Would you like to quit the Kernel and close all attached Consoles as well?"
                    justthis = QtGui.QPushButton("&No, just this Tab", self)
                    justthis.setShortcut('N')
                    closeall = QtGui.QPushButton("&Yes, close all", self)
                    closeall.setShortcut('Y')
                    # allow ctrl-d ctrl-d exit, like in terminal
                    closeall.setShortcut('Ctrl+D')
                    box = QtGui.QMessageBox(QtGui.QMessageBox.Question, title,
                                            msg)
                    box.setInformativeText(info)
                    box.addButton(cancel)
                    box.addButton(justthis, QtGui.QMessageBox.NoRole)
                    box.addButton(closeall, QtGui.QMessageBox.YesRole)
                    box.setDefaultButton(closeall)
                    box.setEscapeButton(cancel)
                    pixmap = QtGui.QPixmap(
                        self._app.icon.pixmap(QtCore.QSize(64, 64)))
                    box.setIconPixmap(pixmap)
                    reply = box.exec_()
                    if reply == 1:  # close All
                        for slave in slave_tabs:
                            background(slave.kernel_manager.stop_channels)
                            self.tab_widget.removeTab(
                                self.tab_widget.indexOf(slave))
                        closing_widget.execute("exit")
                        self.tab_widget.removeTab(current_tab)
                        background(kernel_manager.stop_channels)
                    elif reply == 0:  # close Console
                        if not closing_widget._existing:
                            # Have kernel: don't quit, just close the tab
                            closing_widget.execute("exit True")
                        self.tab_widget.removeTab(current_tab)
                        background(kernel_manager.stop_channels)
                else:
                    reply = QtGui.QMessageBox.question(
                        self,
                        title,
                        "Are you sure you want to close this Console?" +
                        "\nThe Kernel and other Consoles will remain active.",
                        okay | cancel,
                        defaultButton=okay)
                    if reply == okay:
                        self.tab_widget.removeTab(current_tab)
        elif keepkernel:  #close console but leave kernel running (no prompt)
            self.tab_widget.removeTab(current_tab)
            background(kernel_manager.stop_channels)
        else:  #close console and kernel (no prompt)
            self.tab_widget.removeTab(current_tab)
            if kernel_manager and kernel_manager.channels_running:
                for slave in slave_tabs:
                    background(slave.kernel_manager.stop_channels)
                    self.tab_widget.removeTab(self.tab_widget.indexOf(slave))
                kernel_manager.shutdown_kernel()
                background(kernel_manager.stop_channels)

        self.update_tab_bar_visibility()
示例#8
0
    def export(self):
        """ Displays a dialog for exporting HTML generated by Qt's rich text
        system.

        Returns
        -------
        The name of the file that was saved, or None if no file was saved.
        """
        parent = self.control.window()
        dialog = QtGui.QFileDialog(parent, 'Save as...')
        dialog.setAcceptMode(QtGui.QFileDialog.AcceptSave)
        filters = [
            'HTML with PNG figures (*.html *.htm)',
            'XHTML with inline SVG figures (*.xhtml *.xml)'
        ]
        dialog.setNameFilters(filters)
        if self.filename:
            dialog.selectFile(self.filename)
            root,ext = os.path.splitext(self.filename)
            if ext.lower() in ('.xml', '.xhtml'):
                dialog.selectNameFilter(filters[-1])

        if dialog.exec_():
            self.filename = dialog.selectedFiles()[0]
            choice = dialog.selectedNameFilter()
            html = self.control.document().toHtml().encode('utf-8')

            # Configure the exporter.
            if choice.startswith('XHTML'):
                exporter = export_xhtml
            else:
                # If there are PNGs, decide how to export them.
                inline = self.inline_png
                if inline is None and IMG_RE.search(html):
                    dialog = QtGui.QDialog(parent)
                    dialog.setWindowTitle('Save as...')
                    layout = QtGui.QVBoxLayout(dialog)
                    msg = "Exporting HTML with PNGs"
                    info = "Would you like inline PNGs (single large html " \
                        "file) or external image files?"
                    checkbox = QtGui.QCheckBox("&Don't ask again")
                    checkbox.setShortcut('D')
                    ib = QtGui.QPushButton("&Inline")
                    ib.setShortcut('I')
                    eb = QtGui.QPushButton("&External")
                    eb.setShortcut('E')
                    box = QtGui.QMessageBox(QtGui.QMessageBox.Question,
                                            dialog.windowTitle(), msg)
                    box.setInformativeText(info)
                    box.addButton(ib, QtGui.QMessageBox.NoRole)
                    box.addButton(eb, QtGui.QMessageBox.YesRole)
                    box.setDefaultButton(ib)
                    layout.setSpacing(0)
                    layout.addWidget(box)
                    layout.addWidget(checkbox)
                    dialog.setLayout(layout)
                    dialog.show()
                    reply = box.exec_()
                    dialog.hide()
                    inline = (reply == 0)
                    if checkbox.checkState():
                        # Don't ask anymore; always use this choice.
                        self.inline_png = inline
                exporter = lambda h, f, i: export_html(h, f, i, inline)

            # Perform the export!
            try:
                return exporter(html, self.filename, self.image_tag)
            except Exception, e:
                msg = "Error exporting HTML to %s\n" % self.filename + str(e)
                reply = QtGui.QMessageBox.warning(parent, 'Error', msg,
                    QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)
示例#9
0
 def closeEvent(self, event):
     """ Close the window and the kernel (if necessary).
     
     This will prompt the user if they are finished with the kernel, and if
     so, closes the kernel cleanly. Alternatively, if the exit magic is used,
     it closes without prompt.
     """
     keepkernel = None #Use the prompt by default
     if hasattr(self._frontend,'_keep_kernel_on_exit'): #set by exit magic
         keepkernel = self._frontend._keep_kernel_on_exit
     
     kernel_manager = self._frontend.kernel_manager
     
     if keepkernel is None: #show prompt
         if kernel_manager and kernel_manager.channels_running:
             title = self.window().windowTitle()
             cancel = QtGui.QMessageBox.Cancel
             okay = QtGui.QMessageBox.Ok
             if self._may_close:
                 msg = "You are closing this Console window."
                 info = "Would you like to quit the Kernel and all attached Consoles as well?"
                 justthis = QtGui.QPushButton("&No, just this Console", self)
                 justthis.setShortcut('N')
                 closeall = QtGui.QPushButton("&Yes, quit everything", self)
                 closeall.setShortcut('Y')
                 box = QtGui.QMessageBox(QtGui.QMessageBox.Question,
                                         title, msg)
                 box.setInformativeText(info)
                 box.addButton(cancel)
                 box.addButton(justthis, QtGui.QMessageBox.NoRole)
                 box.addButton(closeall, QtGui.QMessageBox.YesRole)
                 box.setDefaultButton(closeall)
                 box.setEscapeButton(cancel)
                 reply = box.exec_()
                 if reply == 1: # close All
                     kernel_manager.shutdown_kernel()
                     #kernel_manager.stop_channels()
                     event.accept()
                 elif reply == 0: # close Console
                     if not self._existing:
                         # Have kernel: don't quit, just close the window
                         self._app.setQuitOnLastWindowClosed(False)
                         self.deleteLater()
                     event.accept()
                 else:
                     event.ignore()
             else:
                 reply = QtGui.QMessageBox.question(self, title,
                     "Are you sure you want to close this Console?"+
                     "\nThe Kernel and other Consoles will remain active.",
                     okay|cancel,
                     defaultButton=okay
                     )
                 if reply == okay:
                     event.accept()
                 else:
                     event.ignore()
     elif keepkernel: #close console but leave kernel running (no prompt)
         if kernel_manager and kernel_manager.channels_running:
             if not self._existing:
                 # I have the kernel: don't quit, just close the window
                 self._app.setQuitOnLastWindowClosed(False)
             event.accept()
     else: #close console and kernel (no prompt)
         if kernel_manager and kernel_manager.channels_running:
             kernel_manager.shutdown_kernel()
             event.accept()