### Class

# Gtk Notebook

#### Description [src]

    final class Gtk.Notebook : Gtk.Widget
      implements Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget {
      /* No available fields */
    }

Switches between children using tabs.

There are many configuration options for `GtkNotebook`. Among other things, you can choose on which edge the tabs appear (see `gtk_notebook_set_tab_pos()`), whether, if there are too many tabs to fit the notebook should be made bigger or scrolling arrows added (see `gtk_notebook_set_scrollable()`), and whether there will be a popup menu allowing the users to switch pages. (see `gtk_notebook_popup_enable()`).

# GtkNotebook as GtkBuildable

The `GtkNotebook` implementation of the `GtkBuildable` interface supports placing children into tabs by specifying “tab” as the “type” attribute of a `<child>` element. Note that the content of the tab must be created before the tab can be filled. A tab child can be specified without specifying a `<child>` type attribute.

To add a child widget in the notebooks action area, specify “action-start” or “action-end” as the “type” attribute of the `<child>` element.

An example of a UI definition fragment with `GtkNotebook`:

    <object class="GtkNotebook">
      <child>
        <object class="GtkLabel" id="notebook-content">
          <property name="label">Content</property>
        </object>
      </child>
      <child type="tab">
        <object class="GtkLabel" id="notebook-tab">
          <property name="label">Tab</property>
        </object>
      </child>
    </object>

# Shortcuts and Gestures

`GtkNotebook` supports the following keyboard shortcuts:

- `Shift`+`F10` or `Menu` opens the context menu.
- `Home` moves the focus to the first tab.
- `End` moves the focus to the last tab.

Additionally, the following signals have default keybindings:

- `GtkNotebook::change-current-page`
- `GtkNotebook::focus-tab`
- `GtkNotebook::move-focus-out`
- `GtkNotebook::reorder-tab`
- `GtkNotebook::select-page`

Tabs support drag-and-drop between notebooks sharing the same `group-name`, or to new windows by handling the `::create-window` signal.

# Actions

`GtkNotebook` defines a set of built-in actions:

- `menu.popup` opens the tabs context menu.

# CSS nodes

    notebook
    ├── header.top
    │   ├── [<action widget>]
    │   ├── tabs
    │   │   ├── [arrow]
    │   │   ├── tab
    │   │   │   ╰── <tab label>
    ┊   ┊   ┊
    │   │   ├── tab[.reorderable-page]
    │   │   │   ╰── <tab label>
    │   │   ╰── [arrow]
    │   ╰── [<action widget>]
    │
    ╰── stack
        ├── <child>
        ┊
        ╰── <child>

`GtkNotebook` has a main CSS node with name `notebook`, a subnode with name `header` and below that a subnode with name `tabs` which contains one subnode per tab with name `tab`.

If action widgets are present, their CSS nodes are placed next to the `tabs` node. If the notebook is scrollable, CSS nodes with name `arrow` are placed as first and last child of the `tabs` node.

The main node gets the `.frame` style class when the notebook has a border (see `gtk_notebook_set_show_border()`).

The header node gets one of the style class `.top`, `.bottom`, `.left` or `.right`, depending on where the tabs are placed. For reorderable pages, the tab node gets the `.reorderable-page` class.

A `tab` node gets the `.dnd` style class while it is moved with drag-and-drop.

The nodes are always arranged from left-to-right, regardless of text direction.

# Accessibility

`GtkNotebook` uses the following roles:

- `GTK_ACCESSIBLE_ROLE_GROUP` for the notebook widget
- `GTK_ACCESSIBLE_ROLE_TAB_LIST` for the list of tabs
- `GTK_ACCESSIBLE_ROLE_TAB` role for each tab
- `GTK_ACCESSIBLE_ROLE_TAB_PANEL` for each page.

#### Ancestors

- GtkWidget
- GInitiallyUnowned
- GObject

#### Implements

- GtkAccessible
- GtkBuildable
- GtkConstraintTarget

#### Constructors

###### gtk_notebook_new

Creates a new `GtkNotebook` widget with no pages.

#### Instance methods

###### gtk_notebook_append_page

Appends a page to `notebook`.

###### gtk_notebook_append_page_menu

Appends a page to `notebook`, specifying the widget to use as the label in the popup menu.

###### gtk_notebook_detach_tab

Removes the child from the notebook.

###### gtk_notebook_get_action_widget

Gets one of the action widgets.

###### gtk_notebook_get_current_page

Returns the page number of the current page.

###### gtk_notebook_get_group_name

Gets the current group name for `notebook`.

###### gtk_notebook_get_menu_label

Retrieves the menu label widget of the page containing `child`.

###### gtk_notebook_get_menu_label_text

Retrieves the text of the menu label for the page containing `child`.

###### gtk_notebook_get_n_pages

Gets the number of pages in a notebook.

###### gtk_notebook_get_nth_page

Returns the child widget contained in page number `page_num`.

###### gtk_notebook_get_page

Returns the `GtkNotebookPage` for `child`.

###### gtk_notebook_get_pages

Returns a `GListModel` that contains the pages of the notebook.

###### gtk_notebook_get_scrollable

Returns whether the tab label area has arrows for scrolling.

###### gtk_notebook_get_show_border

Returns whether a bevel will be drawn around the notebook pages.

###### gtk_notebook_get_show_tabs

Returns whether the tabs of the notebook are shown.

###### gtk_notebook_get_tab_detachable

Returns whether the tab contents can be detached from `notebook`.

###### gtk_notebook_get_tab_label

Returns the tab label widget for the page `child`.

###### gtk_notebook_get_tab_label_text

Retrieves the text of the tab label for the page containing `child`.

###### gtk_notebook_get_tab_pos

Gets the edge at which the tabs are drawn.

###### gtk_notebook_get_tab_reorderable

Gets whether the tab can be reordered via drag and drop or not.

###### gtk_notebook_insert_page

Insert a page into `notebook` at the given position.

###### gtk_notebook_insert_page_menu

Insert a page into `notebook` at the given position, specifying the widget to use as the label in the popup menu.

###### gtk_notebook_next_page

Switches to the next page.

###### gtk_notebook_page_num

Finds the index of the page which contains the given child widget.

###### gtk_notebook_popup_disable

Disables the popup menu.

###### gtk_notebook_popup_enable

Enables the popup menu.

###### gtk_notebook_prepend_page

Prepends a page to `notebook`.

###### gtk_notebook_prepend_page_menu

Prepends a page to `notebook`, specifying the widget to use as the label in the popup menu.

###### gtk_notebook_prev_page

Switches to the previous page.

###### gtk_notebook_remove_page

Removes a page from the notebook given its index in the notebook.

###### gtk_notebook_reorder_child

Reorders the page containing `child`, so that it appears in position `position`.

###### gtk_notebook_set_action_widget

Sets `widget` as one of the action widgets.

###### gtk_notebook_set_current_page

Switches to the page number `page_num`.

###### gtk_notebook_set_group_name

Sets a group name for `notebook`.

###### gtk_notebook_set_menu_label

Changes the menu label for the page containing `child`.

###### gtk_notebook_set_menu_label_text

Creates a new label and sets it as the menu label of `child`.

###### gtk_notebook_set_scrollable

Sets whether the tab label area will have arrows for scrolling if there are too many tabs to fit in the area.

###### gtk_notebook_set_show_border

Sets whether a bevel will be drawn around the notebook pages.

###### gtk_notebook_set_show_tabs

Sets whether to show the tabs for the notebook or not.

###### gtk_notebook_set_tab_detachable

Sets whether the tab can be detached from `notebook` to another notebook or widget.

###### gtk_notebook_set_tab_label

Changes the tab label for `child`.

###### gtk_notebook_set_tab_label_text

Creates a new label and sets it as the tab label for the page containing `child`.

###### gtk_notebook_set_tab_pos

Sets the edge at which the tabs are drawn.

###### gtk_notebook_set_tab_reorderable

Sets whether the notebook tab can be reordered via drag and drop or not.

##### Methods inherited from GtkWidget (164)

Please see GtkWidget for a full list of methods.

##### Methods inherited from GObject (43)

Please see GObject for a full list of methods.

##### Methods inherited from GtkAccessible (21)

###### gtk_accessible_announce

Requests the user’s screen reader to announce the given message.

since: 4.14

###### gtk_accessible_get_accessible_id

Retrieves the accessible identifier for the accessible object.

since: 4.22

###### gtk_accessible_get_accessible_parent

Retrieves the accessible parent for an accessible object.

since: 4.10

###### gtk_accessible_get_accessible_role

Retrieves the accessible role of an accessible object.

###### gtk_accessible_get_at_context

Retrieves the implementation for the given accessible object.

since: 4.10

###### gtk_accessible_get_bounds

Queries the coordinates and dimensions of this accessible.

since: 4.10

###### gtk_accessible_get_first_accessible_child

Retrieves the first accessible child of an accessible object.

since: 4.10

###### gtk_accessible_get_next_accessible_sibling

Retrieves the next accessible sibling of an accessible object.

since: 4.10

###### gtk_accessible_get_platform_state

Queries a platform state, such as focus.

since: 4.10

###### gtk_accessible_reset_property

Resets the accessible property to its default value.

###### gtk_accessible_reset_relation

Resets the accessible relation to its default value.

###### gtk_accessible_reset_state

Resets the accessible state to its default value.

###### gtk_accessible_set_accessible_parent

Sets the parent and sibling of an accessible object.

since: 4.10

###### gtk_accessible_update_next_accessible_sibling

Updates the next accessible sibling.

since: 4.10

###### gtk_accessible_update_platform_state

Informs ATs that the platform state has changed.

since: 4.18

###### gtk_accessible_update_property

Updates a list of accessible properties.

###### gtk_accessible_update_property_value

Updates an array of accessible properties.

###### gtk_accessible_update_relation

Updates a list of accessible relations.

###### gtk_accessible_update_relation_value

Updates an array of accessible relations.

###### gtk_accessible_update_state

Updates a list of accessible states.

###### gtk_accessible_update_state_value

Updates an array of accessible states.

##### Methods inherited from GtkBuildable (1)

###### gtk_buildable_get_buildable_id

Gets the ID of the `buildable` object.

#### Properties

###### Gtk.Notebook:enable-popup

If `TRUE`, pressing the right mouse button on the notebook shows a page switching menu.

###### Gtk.Notebook:group-name

Group name for tab drag and drop.

###### Gtk.Notebook:page

The index of the current page.

###### Gtk.Notebook:pages

A selection model with the pages.

###### Gtk.Notebook:scrollable

If `TRUE`, scroll arrows are added if there are too many pages to fit.

###### Gtk.Notebook:show-border

Whether the border should be shown.

###### Gtk.Notebook:show-tabs

Whether tabs should be shown.

###### Gtk.Notebook:tab-pos

Which side of the notebook holds the tabs.

##### Properties inherited from GtkWidget (35)

###### Gtk.Widget:can-focus

Whether the widget or any of its descendents can accept the input focus.

###### Gtk.Widget:can-target

Whether the widget can receive pointer events.

###### Gtk.Widget:css-classes

A list of css classes applied to this widget.

###### Gtk.Widget:css-name

The name of this widget in the CSS tree.

###### Gtk.Widget:cursor

The cursor used by `widget`.

###### Gtk.Widget:focus-on-click

Whether the widget should grab focus when it is clicked with the mouse.

###### Gtk.Widget:focusable

Whether this widget itself will accept the input focus.

###### Gtk.Widget:halign

How to distribute horizontal space if widget gets extra space.

###### Gtk.Widget:has-default

Whether the widget is the default widget.

###### Gtk.Widget:has-focus

Whether the widget has the input focus.

###### Gtk.Widget:has-tooltip

Enables or disables the emission of the `GtkWidget::query-tooltip` signal on `widget`.

###### Gtk.Widget:height-request

Overrides for height request of the widget.

###### Gtk.Widget:hexpand

Whether to expand horizontally.

###### Gtk.Widget:hexpand-set

Whether to use the `hexpand` property.

###### Gtk.Widget:layout-manager

The `GtkLayoutManager` instance to use to compute the preferred size of the widget, and allocate its children.

###### Gtk.Widget:limit-events

Makes this widget act like a modal dialog, with respect to event delivery.

since: 4.18

###### Gtk.Widget:margin-bottom

Margin on bottom side of widget.

###### Gtk.Widget:margin-end

Margin on end of widget, horizontally.

###### Gtk.Widget:margin-start

Margin on start of widget, horizontally.

###### Gtk.Widget:margin-top

Margin on top side of widget.

###### Gtk.Widget:name

The name of the widget.

###### Gtk.Widget:opacity

The requested opacity of the widget.

###### Gtk.Widget:overflow

How content outside the widget’s content area is treated.

###### Gtk.Widget:parent

The parent widget of this widget.

###### Gtk.Widget:receives-default

Whether the widget will receive the default action when it is focused.

###### Gtk.Widget:root

The `GtkRoot` widget of the widget tree containing this widget.

###### Gtk.Widget:scale-factor

The scale factor of the widget.

###### Gtk.Widget:sensitive

Whether the widget responds to input.

###### Gtk.Widget:tooltip-markup

Sets the text of tooltip to be the given string, which is marked up with Pango markup.

###### Gtk.Widget:tooltip-text

Sets the text of tooltip to be the given string.

###### Gtk.Widget:valign

How to distribute vertical space if widget gets extra space.

###### Gtk.Widget:vexpand

Whether to expand vertically.

###### Gtk.Widget:vexpand-set

Whether to use the `vexpand` property.

###### Gtk.Widget:visible

Whether the widget is visible.

###### Gtk.Widget:width-request

Overrides for width request of the widget.

##### Properties inherited from GtkAccessible (1)

###### GtkAccessible:accessible-role

The accessible role of the given `GtkAccessible` implementation.

#### Signals

###### Gtk.Notebook::change-current-page

Emitted when the current page should be changed.

###### Gtk.Notebook::create-window

The ::create-window signal is emitted when a detachable tab is dropped on the root window.

###### Gtk.Notebook::focus-tab

Emitted when a tab should be focused.

###### Gtk.Notebook::move-focus-out

Emitted when focus was moved out.

###### Gtk.Notebook::page-added

The ::page-added signal is emitted in the notebook right after a page is added to the notebook.

###### Gtk.Notebook::page-removed

The ::page-removed signal is emitted in the notebook right after a page is removed from the notebook.

###### Gtk.Notebook::page-reordered

The ::page-reordered signal is emitted in the notebook right after a page has been reordered.

###### Gtk.Notebook::reorder-tab

Emitted when the tab should be reordered.

###### Gtk.Notebook::select-page

Emitted when a page should be selected.

###### Gtk.Notebook::switch-page

Emitted when the user or a function changes the current page.

##### Signals inherited from GtkWidget (13)

###### GtkWidget::destroy

Signals that all holders of a reference to the widget should release the reference that they hold.

###### GtkWidget::direction-changed

Emitted when the text direction of a widget changes.

###### GtkWidget::hide

Emitted when `widget` is hidden.

###### GtkWidget::keynav-failed

Emitted if keyboard navigation fails.

###### GtkWidget::map

Emitted when `widget` is going to be mapped.

###### GtkWidget::mnemonic-activate

Emitted when a widget is activated via a mnemonic.

###### GtkWidget::move-focus

Emitted when the focus is moved.

###### GtkWidget::query-tooltip

Emitted when the widget’s tooltip is about to be shown.

###### GtkWidget::realize

Emitted when `widget` is associated with a `GdkSurface`.

###### GtkWidget::show

Emitted when `widget` is shown.

###### GtkWidget::state-flags-changed

Emitted when the widget state changes.

###### GtkWidget::unmap

Emitted when `widget` is going to be unmapped.

###### GtkWidget::unrealize

Emitted when the `GdkSurface` associated with `widget` is destroyed.

##### Signals inherited from GObject (1)

###### GObject::notify

The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.