2012-04-21 2 views
1

를 추가 : 나는 그것을 어떻게 할 수 ...GTK 그리드이 코드가 두 위젯

/* Descrizione: GUI Client FTP sviluppato come progetto per il corso di Reti di Calcolatori (laurea SSRI presso DTI Crema) 
* Sviluppatori: Paolo Stivanin, Filippo Roncari, Stefano Agostini. 
* Anno: 2012 
* Licenza: GNU AGPL v3 <http://www.gnu.org/licenses/agpl-3.0.html> 
* Sito web: <https://github.com/polslinux/FTPUtils> */ 

#include <gtk/gtk.h> 

/* When "connect" button is clicked a message will appear */ 
static void print_hello (GtkWidget *widget, gpointer data) 
{ 
    g_print ("Connect button clicked\n"); 
} 

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

/* Declare widgets */ 
GtkWidget *window; 
GtkWidget *grid; 
GtkWidget *button; 
GtkWidget *u_name; 
GtkWidget *h_name; 
GtkWidget *pass; 
GtkWidget *label_user; 
GtkWidget *label_host; 
GtkWidget *label_pass; 

/*This is called in all GTK applications. Arguments are parsed from the command line and are returned to the application.*/ 
gtk_init (&argc, &argv); 

/* create a new window, set its title and put it on center */ 
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
gtk_window_set_title (GTK_WINDOW (window), "FTP Client"); 
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); 
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); 
gtk_container_set_border_width (GTK_CONTAINER (window), 10); 
gtk_window_set_resizable(GTK_WINDOW(window), FALSE); /* window is NOT resizable */ 

/* Here we construct the container that is going pack our buttons */ 
grid = gtk_grid_new(); 
gtk_grid_set_row_spacing (GTK_GRID (grid), 3); 

/* Pack the container in the window */ 
gtk_container_add (GTK_CONTAINER (window), grid); 

/* Add labels */ 
label_user = gtk_label_new("Username "); 
label_host = gtk_label_new("Hostname "); 
label_pass = gtk_label_new("Password "); 

/* Add hostname entry and label */ 
h_name = gtk_entry_new(); 
gtk_entry_set_placeholder_text (GTK_ENTRY (h_name), "Hostname"); /* imposto il testo trasparente che scompare quando clicco o scrivo */ 
gtk_grid_attach (GTK_GRID (grid), label_host, 0, 0, 1, 1); 
gtk_grid_attach (GTK_GRID (grid), h_name, 1, 0, 1, 1); 

/* Add username entry and label */ 
u_name = gtk_entry_new(); 
gtk_entry_set_placeholder_text (GTK_ENTRY (u_name), "Username"); 
gtk_grid_attach (GTK_GRID (grid), label_user, 0, 1, 1, 1); 
gtk_grid_attach (GTK_GRID (grid), u_name, 1, 1, 2, 1); 

/* Add password entry and label (visibility set to 0 = not visible */ 
pass = gtk_entry_new(); 
gtk_entry_set_placeholder_text (GTK_ENTRY (pass), "Password"); 
gtk_grid_attach (GTK_GRID (grid), label_pass, 0, 2, 1, 1); 
gtk_entry_set_visibility (GTK_ENTRY (pass), 0); 
gtk_grid_attach (GTK_GRID (grid), pass, 1, 2, 1, 1); 

/* Add connect button */ 
button = gtk_button_new_with_label ("Connect"); 
g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL); 
gtk_grid_attach (GTK_GRID (grid), button, 0, 3, 2, 1); 

/* Add quit button */ 
button = gtk_button_new_with_label ("Quit"); 
g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL); 
gtk_grid_attach (GTK_GRID (grid), button, 0, 4, 2, 1); 

/* Now that we are done packing our widgets, we show them all in one go, by calling gtk_widget_show_all() on the window.*/ 
gtk_widget_show_all (window); 

/* All GTK applications must have a gtk_main(). Control ends here and waits for an event to occur (like a key press or a mouse event), 
* until gtk_main_quit() is called. */ 
gtk_main(); 

return 0; 
} 

을 그리고 난 더 많은 위젯을 추가하려면? 예를 들어 내가 (예를 들어, 메뉴 소개와 함께) 메뉴 모음을 추가 할 수 있지만 내가 할 경우 :

gtk_container_add (GTK_CONTAINER (window), menubar); 

컴파일러는 내가 창에 1 명 이상의 위젯 ...

I를 추가 할 수 없습니다 말해 우분투 12.04에서 GTK + v3.4.1로 GUI 개발하기!

+0

코드 덤프를 통해 읽을 필요가 없도록 문제를 좁힐 수 있습니까? 그러면 사람들이 더 빠르고 쉽게 도움을받을 수 있습니다. – ptomato

답변

2

창이 아니라 창에 두 번째 위젯을 추가해야합니다. 창에는 하나의 위젯 만 포함될 수 있습니다.이 경우에는 격자입니다. 그리드는 둘 이상의 위젯을 포함 할 수 있습니다.

+0

도움을 주셔서 감사합니다 ... 나는 이것을 작성했습니다 : 'gtk_grid_attach (GTK_GRID (grid), menub, 1,1,1,1); menub = gtk_menu_bar_new(); file_item = gtk_menu_item_new_with_label ("파일"); file_menu = gtk_menu_new(); gtk_menu_item_set_submenu (GTK_MENU_ITEM (file_item을), file_menu) 실행시' 그러나 나는 오류를 얻을 : 'gtk_grid_attach : 주장'GTK_IS_WIDGET (아이) '당신이 시도 후 메뉴 표시 줄 위젯을 만드는처럼 – polslinux

+0

가 보이는 failed' 그것을 첨부하십시오. 먼저 작성한 다음 첨부하십시오. – ptomato

+0

코드 및 문제 설명을 업데이트했습니다. 추신 : 귀하의 도움에 감사드립니다. – polslinux