2017-08-07 62 views
0

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

这里我的代码,但它并不显示网格,不保存在林间空地文件的修改:

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文件,并因此显示修改的窗口

+0

粘贴您的代码。 –

回答

0

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

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

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

如果你想隐藏在一个时间/显示几个项目,你可以将它们在框架或盒子单独GtkFrameGtkGridGtkBox一遍,然后应用隐藏/显示。

+0

这是一个好主意,但我的问题是我不知道什么时候创建窗口需要添加多少行。 – Marco

+0

至少在Python中,您可以动态地将行添加到GtkGrid,或者将项添加到GtkBox。所以这不应该是一个问题。只需在空地中定义一个GtkBox,然后放入你*知道的物品。然后,您可以通过代码添加更多内容。自从我用C以来已经有一段时间了,但我怀疑它也可能存在。 – jcoppens

+0

好的,但如果我通过代码添加项目,他们将被保存在glade文件中,否则他们会出现,因为代码强加它? – Marco