C Gtk+;:如何在表格中将标签向左对齐

C Gtk+;:如何在表格中将标签向左对齐,c,gtk,C,Gtk,我目前正在玩一点gtk库,并试图使用C创建一个简单的窗口应用程序,但在对齐表中的标签时遇到了一些困难 更具体地说,这是我到目前为止写的: #include<gtk/gtk.h> static void dest(GtkWidget*, gpointer); int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *table; GtkWidget *label1, *folderC

我目前正在玩一点gtk库,并试图使用C创建一个简单的窗口应用程序,但在对齐表中的标签时遇到了一些困难

更具体地说,这是我到目前为止写的:

#include<gtk/gtk.h>


static void dest(GtkWidget*, gpointer);

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

    GtkWidget *window;
    GtkWidget *table;
    GtkWidget *label1, *folderChooser1;
    GtkWidget *label2, *folderChooser2;

    gtk_init(&argc,&argv);


    /*************************************
     * setting the first row in table
     *************************************/
    label1=gtk_label_new("Browse For a Folder To Backup: ");
    //gtk_misc_set_alignment(GTK_MISC(label1), 0, .5);              // neither this
    //gtk_label_set_justify(GTK_LABEL(label1, GTK_JUSTIFY_LEFT);    // nor this aligns the label to the left.
    folderChooser1=gtk_file_chooser_button_new("Browse For Folder...", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (folderChooser1), g_get_home_dir());


    /*************************************
     * setting the second row
     *************************************/
    label2=gtk_label_new("Choose Backup Path: ");
    //gtk_misc_set_alignment(GTK_MISC(label2), 0, .5);              // neither this
    //gtk_label_set_justify(GTK_LABEL(label2, GTK_JUSTIFY_LEFT);    // nor this aligns the label to the left.
    folderChooser2=gtk_file_chooser_button_new("Browse For Folder...", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (folderChooser2), g_get_home_dir());


    /***************************************
     * setting table
     ***************************************/
    table=gtk_table_new(2,2,TRUE);
    gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 15, 0);
    gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 15, 0);
    gtk_table_attach_defaults(GTK_TABLE(table), folderChooser1, 1, 2, 0, 1);
    gtk_table_attach_defaults(GTK_TABLE(table), folderChooser2, 1, 2, 1, 2);


    /********************************
     * setting window 
     ********************************/
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Backup");
    gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);

    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(dest), NULL);
    gtk_container_add(GTK_CONTAINER (window), table);   

    gtk_widget_show_all(window);

    gtk_main();
    return 0;
}


static void dest(GtkWidget *window, gpointer data) {
    gtk_main_quit();
}
#包括
静态无效目标(GtkWidget*,gpointer);
int main(int argc,char*argv[]){
GtkWidget*窗口;
GtkWidget*表;
GtkWidget*标签1,*文件夹选择器1;
GtkWidget*标签2,*文件夹选择器2;
gtk_init(&argc,&argv);
/*************************************
*设置表中的第一行
*************************************/
label1=gtk_label_new(“浏览要备份的文件夹:”);
//gtk_misc_set_校准(gtk_misc(label1),0.5);//这两个都不是
//gtk_label_set_justify(gtk_label(label1,gtk_justify_LEFT);//这也不会使标签向左对齐。
folderChooser1=gtk_文件_选择器_按钮_新建(“浏览文件夹…”,gtk_文件_选择器_操作_选择文件夹);
gtk_文件选择器设置当前文件夹(gtk_文件选择器(folderChooser1),g_获取主目录();
/*************************************
*设置第二行
*************************************/
label2=gtk_label_new(“选择备份路径:”);
//gtk_misc_set_alignment(gtk_misc(label2),0.5);//这两者都不是
//gtk_label_set_justify(gtk_label(label2,gtk_justify_LEFT);//这也不会使标签向左对齐。
folderChooser2=gtk_文件_选择器_按钮_新建(“浏览文件夹…”,gtk_文件_选择器_操作_选择文件夹);
gtk_文件选择器设置当前文件夹(gtk_文件选择器(folderchooser 2),g_get_home_dir());
/***************************************
*摆台
***************************************/
table=gtk_table_new(2,2,真);
gtk_表附(gtk_表(表),标签1,0,1,0,1,gtk_收缩,gtk_收缩,15,0);
gtk_表附(gtk_表(表),标签2,0,1,1,2,gtk_收缩,gtk_收缩,15,0);
gtk_table_attach_默认值(gtk_table(table),文件夹选择器1,1,2,0,1);
gtk_table_attach_默认值(gtk_table(table),文件夹选择器2,1,2,1,2);
/********************************
*设置窗口
********************************/
窗口=gtk_窗口_新建(gtk_窗口_顶层);
gtk_窗口设置标题(gtk_窗口(窗口),“备份”);
gtk_窗口设置可调整大小(gtk_窗口(窗口),错误);
gtk_容器_设置_边框_宽度(gtk_容器(窗口),10);
g_信号连接(g_对象(窗口),“销毁”,g_回调(dest),空);
gtk_容器添加(gtk_容器(窗口),表格);
gtk_小部件_全部显示(窗口);
gtk_main();
返回0;
}
静态void dest(GtkWidget*窗口,gpointer数据){
gtk_main_quit();
}
上述代码将产生以下结果:

如您所见,标签居中,我希望它保持对齐。 所有被注释掉的行都不适合我。

是否有一种方法可以对齐表格单元格内的标签?

gtk\u misc\u set\u对齐
适用于我,只要我也使用
gtk\u table\u attach\u defaults
来附着标签:

完整代码供参考:

#include<gtk/gtk.h>


static void dest(GtkWidget*, gpointer);

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

    GtkWidget *window;
    GtkWidget *table;
    GtkWidget *label1, *folderChooser1;
    GtkWidget *label2, *folderChooser2;

    gtk_init(&argc,&argv);


    /*************************************
     * setting the first row in table
     *************************************/
    label1=gtk_label_new("Browse For a Folder To Backup: ");
    gtk_misc_set_alignment(GTK_MISC(label1), 0, .5);              // neither this
    //gtk_label_set_justify(GTK_LABEL(label1, GTK_JUSTIFY_LEFT);    // nor this aligns the label to the left.
    folderChooser1=gtk_file_chooser_button_new("Browse For Folder...", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (folderChooser1), g_get_home_dir());


    /*************************************
     * setting the second row
     *************************************/
    label2=gtk_label_new("Choose Backup Path: ");
    gtk_misc_set_alignment(GTK_MISC(label2), 0, .5);              // neither this
    //gtk_label_set_justify(GTK_LABEL(label2, GTK_JUSTIFY_LEFT);    // nor this aligns the label to the left.
    folderChooser2=gtk_file_chooser_button_new("Browse For Folder...", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (folderChooser2), g_get_home_dir());


    /***************************************
     * setting table
     ***************************************/

    table=gtk_table_new(2,2,TRUE);
    //gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 15, 0);
    //gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 15, 0);
    gtk_table_attach_defaults(GTK_TABLE(table), label1, 0, 1, 0, 1);
    gtk_table_attach_defaults(GTK_TABLE(table), label2, 0, 1, 1, 2);
    gtk_table_attach_defaults(GTK_TABLE(table), folderChooser1, 1, 2, 0, 1);
    gtk_table_attach_defaults(GTK_TABLE(table), folderChooser2, 1, 2, 1, 2);

    /********************************
     * setting window
     ********************************/
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Backup");
    gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);

    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(dest), NULL);
    gtk_container_add(GTK_CONTAINER (window), table);

    gtk_widget_show_all(window);

    gtk_main();
    return 0;
}


static void dest(GtkWidget *window, gpointer data) {
    gtk_main_quit();
}
#包括
静态无效目标(GtkWidget*,gpointer);
int main(int argc,char*argv[]){
GtkWidget*窗口;
GtkWidget*表;
GtkWidget*标签1,*文件夹选择器1;
GtkWidget*标签2,*文件夹选择器2;
gtk_init(&argc,&argv);
/*************************************
*设置表中的第一行
*************************************/
label1=gtk_label_new(“浏览要备份的文件夹:”);
gtk_misc_set_校准(gtk_misc(label1),0.5);//这两个都不是
//gtk_label_set_justify(gtk_label(label1,gtk_justify_LEFT);//这也不会使标签向左对齐。
folderChooser1=gtk_文件_选择器_按钮_新建(“浏览文件夹…”,gtk_文件_选择器_操作_选择文件夹);
gtk_文件选择器设置当前文件夹(gtk_文件选择器(folderChooser1),g_获取主目录();
/*************************************
*设置第二行
*************************************/
label2=gtk_label_new(“选择备份路径:”);
gtk_misc_set_alignment(gtk_misc(label2),0.5);//这两者都不是
//gtk_label_set_justify(gtk_label(label2,gtk_justify_LEFT);//这也不会使标签向左对齐。
folderChooser2=gtk_文件_选择器_按钮_新建(“浏览文件夹…”,gtk_文件_选择器_操作_选择文件夹);
gtk_文件选择器设置当前文件夹(gtk_文件选择器(folderchooser 2),g_get_home_dir());
/***************************************
*摆台
***************************************/
table=gtk_table_new(2,2,真);
//gtk_表附(gtk_表(表),标签1,0,1,0,1,gtk_收缩,gtk_收缩,15,0);
//gtk_表附(gtk_表(表),标签2,0,1,1,2,gtk_收缩,gtk_收缩,15,0);
gtk_table_attach_默认值(gtk_table(table),标签1,0,1,0,1);
gtk_table_attach_默认值(gtk_table(table)),标签2,0,1,1,2;
gtk_table_attach_默认值(gtk_table(table),文件夹选择器1,1,2,0,1);
gtk_table_attach_默认值(gtk_table(table),文件夹选择器2,1,2,1,2);
/********************************
*设置窗口
********************************/
窗口=gtk_窗口_新建(gtk_窗口_顶层);
gtk_窗口设置标题(gtk_窗口(窗口),“备份”);
gtk_窗口设置可调整大小(gtk_窗口(窗口),错误);
gtk_容器_设置_边框_宽度(gtk_容器(窗口),10);
g_信号连接(g_对象(窗口),“销毁”,g_回调(dest),空);
gtk_容器添加(gtk_容器(窗口),表格);
gtk_小部件_全部显示(窗口);
gtk_main();
返回0;
}
静态void dest(GtkWidget*窗口,gpointer数据){
gtk_main_quit();
}

(在Ubuntu 12.04上使用gtk 2.0进行测试)

是的!这里也一样…:)谢谢。为什么非默认版本会阻止对齐?我不知道,但我注意到只要我调用