# Module: `qt.console.mainwindow`

The Qt MainWindow for the QtConsole

This is a tabbed pseudo-terminal of IPython sessions, with a menu bar for common actions.

Authors:

- Evan Patterson
- Min RK
- Erik Tollerud
- Fernando Perez
- Bussonnier Matthias
- Thomas Kluyver
- Paul Ivanov

## 1 Class

class `IPython.qt.console.mainwindow.``MainWindow`(app, confirm_exit=True, new_frontend_factory=None, slave_frontend_factory=None)

  Bases: `PyQt4.QtGui.QMainWindow`

  `__init__`(app, confirm_exit=True, new_frontend_factory=None, slave_frontend_factory=None)

    Create a tabbed MainWindow for managing IPython FrontendWidgets

    Parameters:

    app : reference to QApplication parent

    confirm_exit : bool, optional

    > Whether we should prompt on close of tabs

    new_frontend_factory : callable

    > A callable that returns a new IPythonWidget instance, attached to its own running kernel.

    slave_frontend_factory : callable

    > A callable that takes an existing IPythonWidget, and returns a new IPythonWidget instance, attached to the same kernel.

  `add_menu_action`(menu, action, defer_shortcut=False)

    Add action to menu as well as self

    So that when the menu bar is invisible, its actions are still available.

    If defer_shortcut is True, set the shortcut context to widget-only, where it will avoid conflict with shortcuts already bound to the widgets themselves.

  `add_tab_with_frontend`(frontend, name=None)

    insert a tab with a given frontend in the tab bar, and give it a name

  `closeEvent`(event)

    Forward the close event to every tabs contained by the windows

  `close_tab`(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

  `create_tab_with_current_kernel`()

    create a new frontend attached to the same kernel as the current tab

  `create_tab_with_new_frontend`()

    create a new frontend and attach it to a new tab

  `find_master_tab`(tab, as_list=False)

    Try to return the frontend that owns the kernel attached to the given widget/tab.

    > Only finds frontend owned by the current application. Selection based on port of the kernel might be inaccurate if several kernel on different ip use same port number.

    > This function does the conversion tabNumber/widget if needed. Might return None if no master widget (non local kernel) Will crash IPython if more than 1 masterWidget

    > When asList set to True, always return a list of widget(s) owning the kernel. The list might be empty or containing several Widget.

  `find_slave_widgets`(tab)

    return all the frontends that do not own the kernel attached to the given widget/tab.

    Only find frontends owned by the current application. Selection based on connection file of the kernel.

    This function does the conversion tabNumber/widget if needed.

  `next_kernel_id`

    constantly increasing counter for kernel IDs

  `populate_all_magic_menu`(display_data=None)

    Clean “All Magics...” menu and repopulate it with display_data

    Parameters:

    display_data : dict,

    > dict of display_data for the magics dict of a MagicsManager. Expects json data, as the result of %lsmagic

  `update_all_magic_menu`()

    Update the list of magics in the “All Magics...” Menu

    Request the kernel with the list of available magics and populate the menu with the list received back

  `update_tab_bar_visibility`()

    update visibility of the tabBar depending of the number of tab

    0 or 1 tab, tabBar hidden 2+ tabs, tabBar visible

    send a self.close if number of tab ==0

    need to be called explicitly, or be connected to tabInserted/tabRemoved

## 1 Function

`IPython.qt.console.mainwindow.``background`(f)

  call a function in a simple thread, to prevent blocking