How to expand widget

,

Hello all,
I need help with my app in gtk4 in C.
I have there notebook and at third tab is horizontal box (called hBox3) and in it is scrolled window and inside it several another boxes and widgets…

I need that hBox3 vertically expand in whole window app and I do not know how to do that.
Please could anybody help me. Here is my code:

#include <gtk/gtk.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>

using namespace std;

static void appActivate (GApplication *app, gpointer user_data)
{
    GtkWidget *window = gtk_application_window_new (GTK_APPLICATION (app));
    gtk_widget_show (window);

    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_window_destroy), NULL);

    GtkWidget* vBoxVsechno = gtk_box_new (GTK_ORIENTATION_VERTICAL,0);
    gtk_window_set_child (GTK_WINDOW (window), vBoxVsechno);

    GtkWidget* pokusnejLabel = gtk_label_new("pokus");
    gtk_box_append (GTK_BOX (vBoxVsechno), pokusnejLabel);

    // notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook

    GtkWidget* zalozkovnik = gtk_notebook_new();
    gtk_box_append (GTK_BOX (vBoxVsechno), zalozkovnik);
    gtk_notebook_set_tab_pos (GTK_NOTEBOOK (zalozkovnik), GTK_POS_TOP);

    GtkWidget* hBox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,0);
    gtk_notebook_append_page (GTK_NOTEBOOK (zalozkovnik), hBox1, gtk_label_new ("list 1"));

    GtkWidget* hBox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,0);
    gtk_notebook_append_page (GTK_NOTEBOOK (zalozkovnik), hBox2, gtk_label_new ("list 2"));

    GtkWidget* hBox3 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,0);

    gtk_widget_set_hexpand(hBox3,true);

    gtk_box_set_homogeneous(GTK_BOX(hBox3), true);
    gtk_notebook_append_page (GTK_NOTEBOOK (zalozkovnik), hBox3, gtk_label_new ("list 3"));
    // notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook

    GtkWidget* skrollWindow = gtk_scrolled_window_new();
    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (skrollWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
    gtk_box_append (GTK_BOX (hBox3), skrollWindow);

    GtkWidget* hBox31 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,0);
    gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW (skrollWindow), hBox31);

    GtkWidget* vBoxLabels = gtk_box_new (GTK_ORIENTATION_VERTICAL,0);
    gtk_box_append (GTK_BOX (hBox31), vBoxLabels);
    gtk_box_set_homogeneous(GTK_BOX(hBox31), true);

    GtkWidget* vBoxElements = gtk_box_new (GTK_ORIENTATION_VERTICAL,0);
    gtk_box_set_homogeneous(GTK_BOX(vBoxElements), true);
    gtk_box_append (GTK_BOX (hBox31), vBoxElements);

    GtkWidget* labelDatum = gtk_label_new("* Datum závodů (DD.MM.RRRR): ");
    gtk_box_append (GTK_BOX (vBoxLabels), labelDatum);
    GtkWidget* entryDatum = gtk_entry_new();
    gtk_box_append (GTK_BOX (vBoxElements), entryDatum);

    string datumZavodu = "10.3.2023";
    gtk_editable_set_text(GTK_EDITABLE(entryDatum),datumZavodu.c_str());

    GtkWidget* labelSeznamZavodnikuCSV = gtk_label_new("Seznam závodníků *.csv: ");
    gtk_box_append (GTK_BOX (vBoxLabels), labelSeznamZavodnikuCSV);

    GtkWidget* vyberSeznamZavodnikuCSV =  gtk_button_new_with_label("Vyber soubor s seznamem závodníků *.csv - bude treba poresit");

    gtk_box_append (GTK_BOX (vBoxElements), vyberSeznamZavodnikuCSV);
    GtkWidget* labelAdresarSeznamu = gtk_label_new("Adresář seznamu zavodniku (*.xml): ");

    gtk_box_append (GTK_BOX (vBoxLabels), labelAdresarSeznamu);
    GtkWidget* vyberAdresarSeznamu = gtk_button_new_with_label("Vyber adresář kde bude umisten seznam_zavodniku.xml - poresit tlacitko");

    gtk_box_append (GTK_BOX (vBoxElements), vyberAdresarSeznamu);
}


int main(int argc, char **argv)
{
    GtkApplication *app;
    app = gtk_application_new ("testing.app", G_APPLICATION_FLAGS_NONE);
    g_signal_connect (app, "activate", G_CALLBACK (appActivate), NULL);
    return g_application_run (G_APPLICATION (app), NULL, NULL);
    g_object_unref (app);

    return 0;
}

I have prepared image of app and marrked there with red color what I need expand:
img

I now that problem will be solved if I remove scrolled widget - but I plan place there much more widgets - so scrolling widget is neccessary.

Hello @fik236!

You can just set vexpand (true) on the main notebook:

    // notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook notebook

    GtkWidget* zalozkovnik = gtk_notebook_new();
    gtk_box_append (GTK_BOX (vBoxVsechno), zalozkovnik);
    gtk_notebook_set_tab_pos (GTK_NOTEBOOK (zalozkovnik), GTK_POS_TOP);
    gtk_widget_set_vexpand (zalozkovnik, true); // ADDED: set vexpand to true

Great. It works. Thank you.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.