2017-08-07 68 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