如何扩展 GTK window 在滚动的 window 中包含一个非常小的 GRID?

How to expand the GTK window containing a really tiny GRID inside a scrolled window?

我有一个包含 GRID 中 GTK 条目的代码,我的目标是将它们附加到 GRID 中以生成 table 值,类似于“电子表格”。条目在 GRID 中,GRID 在 GTK Scrolled window 中,它在主 window.

但是,我没有得到预期的结果。 GRID真的很小,可以展开。

这是我得到的(图片):

这是我想要的(图片):

这是我的代码:

#include <gtk/gtk.h>

int main(int argc, char **argv){
    gtk_init(&argc, &argv);

    GtkWidget *mainwindow;
    mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(mainwindow), "Example");
    g_signal_connect(mainwindow, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    
    int n = 5;
    
    GtkWidget *entries[n][n];   
    GtkWidget *grid;
    GtkWidget *scrolledwindow; 
    
    grid = gtk_grid_new();
    gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
    gtk_grid_set_column_spacing(GTK_GRID(grid), 3);
    
    scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
    
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            entries[i][j] = gtk_entry_new();

            gtk_grid_attach(GTK_GRID(grid), entries[i][j], i, j, 1, 1);
        }
    }
    
    gtk_container_add(GTK_CONTAINER(scrolledwindow), grid);
    
    gtk_container_add(GTK_CONTAINER(mainwindow), scrolledwindow);

    gtk_widget_show_all(mainwindow);

    gtk_main();
    
    return 0;
}

在网上搜索,我发现了这个问题: Gtk scroll window size in a grid,但它在 Python 中,我不知道,但是 NULL 和 NULL,我必须在这个命令中赋予 a 和 b 什么值:gtk_scrolled_window_new(a, b);

您可以使用 GtkScrolledWindow 中的 gtk_scrolled_window_set_propagate_natural_width and gtk_scrolled_window_set_propagate_natural_height 函数。

例如,在您的代码段中:

    // ...

    scrolledwindow = gtk_scrolled_window_new(NULL, NULL);
    
    // Use the child widget's natural dimensions when requesting the scrollwindow's
    // own natural size:
    gtk_scrolled_window_set_propagate_natural_width(GTK_SCROLLED_WINDOW(scrolledwindow), true);
    gtk_scrolled_window_set_propagate_natural_height(GTK_SCROLLED_WINDOW(scrolledwindow), true);

    for(int i = 0; i < n; i++){

    // ...