'Adding a tab in a GTK-Notebook when using Glade

I have written a C-program and am studying GTK and Glade to build a GUI and now I am stuck for at least two days:

I need a notebook with one tab. In this tab is a button, if clicked a new tab is added.

I found: 'gtk_notebook_append_page(notebook_pointer, tab_content_pointer, label)' but whatever I do it doesn't work. Especially I am not sure what to take as tab_content. I get one out of three error messages: it complains that it is top level and can't get a parent or it has already a parent or the new tab just can't be inserted.

Does anyone know what to take in glade to be used as tab_content? Or knows an example where I could learn that?

Or do I need to dump glade and write everything in C-code? I found examples for that.

Thanks for your help.



Solution 1:[1]

Draw a notebook with Glade. If you right - click on the tab you want to change, you can delete its contents. (A tab can contain a single widget, though you can put in a HBox or a Grid to combine several).

Once deleted, you can insert any other widget there. Here is an example:

A window with a notebookA window with a notebook. First tab contents deleted

enter image description hereInserted a Box, but by default it's vertical, so...

enter image description hereI changed the property to horizontal

enter image description hereI inserted an image widget in the first space, and a checkbutton in the second. (Change the computer's theme to make is a little more visible.

If you want to add pages from you C-code you can do that too, just get a reference to the notebook, and then modify the tab contents.

As a note, I'd recommend looking at using Python as manager of your GUI. Managing GUIs in Gtk and C - using Glade or not - is tedious. There are several example on the net about how to do that:

-Using Python GTK GUI front end with C++ backend

-How to use GTK+ 3 in Python to manage your whole application

This code adds a new tab perfectly here:

notebook = GTK_WIDGET (gtk_builder_get_object (builder, "notebook1"));
    if (!notebook) {
        g_critical ("Widget \"%s\" is missing in file %s.",
        TOP_WINDOW, "notebook1");
    }
tab_label = gtk_label_new ("New page's tab");
page_contents = gtk_label_new ("New page's contents");

gtk_notebook_append_page(notebook, page_contents, tab_label);

Note that you have to put "notebook1" in the ID field of the notebook's widget in Glade.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1