2016-05-02 13 views
0

にウィジェットを配置する方法を私は新しいGTK午前小さなインタフェースを記述しようとしています。しかし、私はGtkGridの中でウィジェットのアラインメントを助ける関数を見つけませんでした。次の絵は、(1)ボタン(2)ラベル内のテキストは左詰めされていない同じサイズではないことを示しています。どうすれば調整できますか?はGtkGrid

#include <gtk/gtk.h> 
//#include <iostream> 
//using namespace std; 



void load_file(GtkWidget *widget, gpointer data) 
{ 
GtkWidget *dialog; 
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN; 
gint res; 

dialog = gtk_file_chooser_dialog_new ("Open File", 
             NULL, 
             action, 
             "Cancel", 
             GTK_RESPONSE_CANCEL, 
             "Open", 
             GTK_RESPONSE_ACCEPT, 
             NULL); 

res = gtk_dialog_run (GTK_DIALOG (dialog)); 
if (res == GTK_RESPONSE_ACCEPT) 
    { 
    char *filename; 
    GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog); 
    filename = gtk_file_chooser_get_filename (chooser); 
    //open_file (filename); 
    //g_free (filename); 
    } 

gtk_widget_destroy (dialog); 

} 


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

    GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_default_size(GTK_WINDOW(window),800,400); 

    GtkWidget *lbl_ldmap = gtk_label_new("Load Map"); 
    GtkWidget *lbl_capacity = gtk_label_new("Capacity"); 
    GtkWidget *lbl_npassenger = gtk_label_new("Passengers"); 
    GtkWidget *lbl_nveh = gtk_label_new("Vehicles"); 
    GtkWidget *lbl_optby = gtk_label_new("Optimize By"); 

// gtk_label_set_justify(GTK_LABEL(lbl_ldmap),gtk_label_set_justify); 


    GtkWidget *btn_fchoose = gtk_button_new_with_label("..."); 
    GtkWidget *btn_start = gtk_button_new_with_label("Start"); 
    GtkWidget *btn_save = gtk_button_new_with_label("Save"); 
    GtkWidget *btn_about = gtk_button_new_with_label("About"); 
    GtkWidget *btn_close = gtk_button_new_with_label("Close"); 


    GtkWidget *mainwindow = gtk_grid_new(); 
    gtk_grid_set_row_spacing (GTK_GRID (mainwindow), 16); 

    gtk_grid_attach(GTK_GRID(mainwindow),lbl_ldmap,0,0,2,2); 
    gtk_grid_attach(GTK_GRID(mainwindow),btn_fchoose,3,0,2,2); 
    gtk_grid_attach(GTK_GRID(mainwindow),lbl_capacity,0,2,2,2); 
    gtk_grid_attach(GTK_GRID(mainwindow),lbl_npassenger,0,4,2,2); 
    gtk_grid_attach(GTK_GRID(mainwindow),lbl_nveh,0,6,2,2); 
    gtk_grid_attach(GTK_GRID(mainwindow),lbl_optby,0,8,2,2); 

    gtk_grid_attach(GTK_GRID(mainwindow),btn_start,0,10,5,2); 
    gtk_grid_attach(GTK_GRID(mainwindow),btn_save,6,10,5,2); 
    gtk_grid_attach(GTK_GRID(mainwindow),btn_about,0,12,5,2); 
    gtk_grid_attach(GTK_GRID(mainwindow),btn_close,6,12,5,2); 


    GtkWidget *area = gtk_drawing_area_new(); 
    gtk_grid_attach(GTK_GRID(mainwindow),area,13,0,20,20); 

    gtk_container_add(GTK_CONTAINER(window),mainwindow); 

    g_signal_connect(G_OBJECT(btn_fchoose),"clicked", 
         G_CALLBACK(load_file),NULL); 





    gtk_widget_show_all(window); 

    gtk_main(); 

    return(0); 
} 

enter image description here

+0

あなたは[HV](拡大|揃える) 'gtk_widget_set_を使用し'機能。詳細については、[ここ](https://developer.gnome.org/gtk3/3.20/ch30s02.html)をご覧ください。 – andlabs

+0

@andlabsの書き込みはコメントではなく答えです –

答えて

2

、彼らはそれを埋めるためにどのように知っている限りGtkBoxとGtkGridなどのコンテナウィジェットが利用できるスペースを埋めることはありません。あなたはそれらのウィジェットにhexpandhalignvexpand、および/またはvalignプロパティを設定することで、拡大GtkBoxまたはGtkGridの子の1つまたは複数を行う必要がある(NOTグリッド自体に!)。詳細は、this pageを参照してください。