如何创建和保存gtk界面

时间:2017-08-07 19:10:51

标签: c gtk glade

我正在使用glade和gtk和c语言来创建一个应用程序。我有一个glade文件,我需要创建一个小部件列表,以澄清我需要创建一个可变数量的行,并在每行我需要放置一些小部件,标签,按钮等。 如何修改我的glade文件并使修改永久保留c代码?

这是我的代码,但它没有显示网格,也没有将修改保存在glade文件中:

void on_Pagamento1_clicked() {

GtkBuilder      *builderPagamento; 
GtkWidget       *window;
GtkGrid         *g_grd_linea;
GtkWidget       *g_cbt_mattino = gtk_combo_box_text_new_with_entry ();
GtkWidget       *g_lbl_nome = gtk_label_new ("Nome");
GtkWidget       *g_lbl_cognome = gtk_label_new ("Cognome");
GtkWidget       *g_lbl_eta = gtk_label_new ("Eta");
GtkLayout       *g_lyt_layout;

int i;

builderPagamento = gtk_builder_new();
gtk_builder_add_from_file (builderPagamento, "glade/pagamento.glade", NULL);

window = GTK_WIDGET(gtk_builder_get_object(builderPagamento, "pagamento"));

gtk_builder_connect_signals(builderPagamento, NULL);

g_lyt_layout = GTK_LAYOUT(gtk_builder_get_object(builderPagamento, "layout"));
gtk_combo_box_text_append_text (g_cbt_mattino,"35.00");
gtk_label_set_text(GTK_LABEL(g_lbl_nome), "Prova");

g_grd_linea = gtk_grid_new();
for(i=1;i<=4;i++){
    gtk_grid_insert_column (g_grd_linea,i);
}
gtk_grid_attach (g_grd_linea,g_lbl_nome,1,0,1,1);
gtk_grid_attach (g_grd_linea,g_lbl_cognome,2,0,1,1);
gtk_grid_attach (g_grd_linea,g_lbl_eta,3,0,1,1);
gtk_grid_attach (g_grd_linea,g_cbt_mattino,4,0,1,1);
gtk_layout_put(g_lyt_layout,g_grd_linea,0,0);

g_object_unref(builderPagamento);

gtk_widget_show(window);  
}

编辑: 我想我已经解决了我的问题:由于窗口不是主窗口而只是通过按下按钮创建,我打开文件并从c代码修改了glade的XML代码,所以当我按下按钮时将显示修改后的glade文件,并相应地显示修改后的窗口

1 个答案:

答案 0 :(得分:0)

解决问题的最简单方法(在我看来)是设计页面,如果不想要的话,你会看不见。即制作你需要的所有表格,把它们放进一个盒子里,然后只显示()其中一个。

如果表单差异不大,请说只有少数项目发生变化,您可以在同一GtkGridGtkBox中执行此操作:只显示您需要显示的字段。在VBox或HBox中,不可见的项目不占用任何空间。

如果你想从Glade做(准备)这个,把你要隐藏的项目设置为不可见,然后通过代码将它们的属性更改为可见。

如果您想一次隐藏/显示多个项目,可以再次将它们分组在单独的GtkFrameGtkGridGtkBox中,然后在其中应用隐藏/显示框架或框。