2013-08-17 148 views
0

我使用GTK C和我想作一個表格,以便從用戶那裏收集輸入。我使用GTK_ENTRY來收集用戶的輸入。GTK:等待用戶輸入

不幸的是,我不知道我怎麼可以把執行是「暫停」,以等待用戶進入其輸入,並儘快恢復其爲輸入已準備就緒。

你能幫助我嗎?

感謝

+0

嘗試'系統(「暫停」)',我知道大多數人討厭它(我做的),但也許它會爲你工作 –

+0

在兩句話:你不知道。相反,你有你的事件循環,當表單被用戶解除(通過「確定」按鈕或「取消」按鈕),你會得到一個關於它的事件。 –

+0

感謝您的意見。 你能分享一個代碼的例子嗎?我試圖使用循環,即使是互斥體,但我的程序只是「凍結」。由於 – Giorgio

回答

0
#include <gtk/gtk.h> 

static void on_button_clicked(GtkButton *button,gpointer data); 
static void on_entry_activate(GtkEntry *entry,gpointer data); 

int main(int argc, char *argv[]) 
{ 
    GtkWidget *window; 
    GtkWidget *entry; 
    GtkWidget *button; 
    GtkWidget *hbox; 

    gtk_init(&argc,&argv); 
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title(GTK_WINDOW(window),"entry"); 
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); 
    gtk_container_set_border_width(GTK_CONTAINER(window),5); 

    hbox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); 
    gtk_container_add(GTK_CONTAINER(window),hbox); 

    entry=gtk_entry_new(); 
    gtk_box_pack_start(GTK_BOX(hbox),entry,TRUE,TRUE,5); 

    button=gtk_button_new_with_label("Ok"); 
    gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,0); 

    g_signal_connect(G_OBJECT(window),"destroy", 
       G_CALLBACK(gtk_main_quit),NULL); 
    g_signal_connect(G_OBJECT(button),"clicked", 
       G_CALLBACK(on_button_clicked),entry); 
    g_signal_connect(G_OBJECT(entry),"activate",/* when you press ENTER */ 
       G_CALLBACK(on_entry_activate),NULL); 

    gtk_widget_show_all(window); 
    gtk_main(); 

    return 0; 
} 

static void on_button_clicked(GtkButton *button,gpointer data) 
{ 
    GtkWidget *entry=(GtkWidget *)data; 
    GtkWidget *dialog; 
    gchar buff[1024]; 

    g_snprintf(buff,1024,"You input '%s' !", 
       gtk_entry_get_text(GTK_ENTRY(entry))); 

    dialog=gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL, 
       GTK_MESSAGE_INFO,GTK_BUTTONS_OK,"%s",buff); 
    gtk_dialog_run(GTK_DIALOG(dialog)); 

    gtk_widget_destroy(dialog); 
    gtk_entry_set_text(GTK_ENTRY(entry),""); 
} 

static void on_entry_activate(GtkEntry *entry,gpointer data) 
{ 
    g_printf("%s\n",gtk_entry_get_text(GTK_ENTRY(entry))); 
} 

這個例子是非常簡單的。輸入是準備當用戶按下進入ENTER鍵或單擊確定按鈕
的代碼非常容易閱讀,我想。祝你好運!

+0

感謝您的代碼! 我可以做一個類似的解決方案,但我現在仍然缺少的是的這是等待用戶輸入密碼的部分。我會盡力做得更清楚。讓我們通過按下一個按鈕來啓動一個功能,並在執行過程中需要用戶輸入。如何「暫停」執行,等待用戶輸入並檢索它?謝謝 – Giorgio

+0

我不完全理解。你的意思是當用戶按下一個按鈕時,應該顯示一個輸入對話框讓用戶輸入數據? – Wiky

+0

你會在哪裏得到用戶輸入?現有的GtkEntry還是新的?如果一個新的GtkEntry,也許GtkDialog可以提供幫助 – Wiky