You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GTK滚动窗口内的极小GRID随主窗口正常扩展?

问题原因说明

首先明确gtk_scrolled_window_new()的两个参数不需要修改:

  • 第一个参数是水平滚动的GtkAdjustment对象,第二个是垂直滚动的GtkAdjustment对象
  • 传入NULL会让GTK自动创建默认的滚动调整对象,完全适配常规滚动窗口使用场景,无需改动

你遇到的网格无法正常扩展的问题,核心是三个配置缺失:

  1. 滚动窗口未设置扩展属性,无法自动填充满主窗口的可用空间
  2. 主窗口未设置初始默认尺寸,启动时会直接收缩到子控件的最小请求大小
  3. 所有Entry控件未设置水平扩展属性,无法填满网格单元格的宽度
修改方案

只需要在原有代码基础上补充3处配置即可:

  1. 给主窗口设置初始默认尺寸
  2. 给滚动窗口开启水平、垂直扩展属性
  3. 给每个Entry控件开启水平扩展属性
修改后完整代码
#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");
    // 新增:设置主窗口初始默认尺寸
    gtk_window_set_default_size(GTK_WINDOW(mainwindow), 600, 400);
    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);
    // 新增:让滚动窗口自动扩展填充满父容器的可用空间
    gtk_widget_set_hexpand(scrolledwindow, TRUE);
    gtk_widget_set_vexpand(scrolledwindow, TRUE);
    
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            entries[i][j] = gtk_entry_new();
            // 新增:让输入框自动扩展填满网格单元格
            gtk_widget_set_hexpand(entries[i][j], TRUE);
            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;
}
效果对比
  • 实际运行效果(原代码):
    实际运行效果
  • 期望效果:
    期望效果

内容的提问来源于stack exchange,提问作者Gabriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:15:04