如何将按钮(小部件)在网格中居中 - GTK C

问题描述 投票:0回答:1

我试图将这些按钮放在创建的网格中。我尝试过 set_halign 和变体,但没有什么是我想要的。不确定如何格式化,但请帮忙。

#include <gtk/gtk.h>

static void ttt_activate(GtkApplication *app){

    GtkWidget *window = gtk_application_window_new (app);
    GtkWidget *grid   = gtk_grid_new();
    GtkWidget *label  = gtk_label_new("Label");

    gtk_window_set_default_size (GTK_WINDOW (window), 800, 800);
    gtk_grid_set_column_spacing(GTK_GRID(grid), 16);
    gtk_grid_set_row_spacing(GTK_GRID(grid), 16);

    // Create buttons 
    GtkWidget * button1 = gtk_button_new_with_label ("button1");
    GtkWidget * button2 = gtk_button_new_with_label ("button2");

    // Attaching buttons
    gtk_grid_attach(GTK_GRID(grid), button1, 5, 3, 2, 3);
    gtk_grid_attach(GTK_GRID(grid), button2, 10, 3, 2, 3);

    // When the button is clicked, close the window passed as an argument
    g_signal_connect_swapped (button1, "clicked", G_CALLBACK (gtk_window_close), window);
    g_signal_connect_swapped (button2, "clicked", G_CALLBACK (gtk_window_close), window);
    gtk_window_set_child(GTK_WINDOW(window), grid);
    gtk_window_present(GTK_WINDOW(window));
}

int main (int argc, char *argv[]) {
  GtkApplication *app = gtk_application_new ("com.example.GtkApplication", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (ttt_activate), NULL);
  return g_application_run (G_APPLICATION (app), argc, argv);
}

here's how the buttons look like

c widget alignment gtk
1个回答
0
投票

默认情况下,GtkGrid 中的单元格仅占用列或行中最大同级单元格实际需要的空间。如果你想让 GtkGrid 中的每个单元格占据完全相同的数量,你需要设置

colum-homogeneous
row-homogeneous
属性,例如通过使用
gtk_grid_set_column_homogeneous()

设置完这些后,您可以设置适当的列和行以将它们放在中间(并在单元格内进行对齐和对齐)

© www.soinside.com 2019 - 2024. All rights reserved.