2015-05-29 26 views
0

我想更新按鍵事件上的文本條目。以編程方式更新GTK文本條目

我的場景沒有鍵盤,所以我以編程方式生成 並嘗試從按鍵事件處理程序更新文本輸入。

在每個按鍵上,我需要更新GTK窗口中的文本條目。 我該如何做到這一點?我試圖

gtk_entry_set_text (GTK_ENTRY (entry1), buffer); 

,但它給出了一個分段錯誤。

我將從其他用戶線程獲取數據,我需要使用新數據更新文本條目並使用更新的文本條目顯示gtk窗口。

以下是我的完整代碼:

GtkEntry *entry1; 

static gboolean kp_event_S1_1(GtkWidget *widget, GdkEventExpose *event, gpointer data) 
{  
    printf(" - kp_event_S1_1 - \n"); 
    gtk_entry_set_text (GTK_ENTRY (entry1), buffer); 
} 


void S1_1(void) 
{ 
    GtkWidget *Win_1; 
    GtkBuilder *builder;   
    builder = gtk_builder_new(); 
    gtk_builder_add_from_file (builder, "/home/glade/glade1.glade", NULL); 
    window = GTK_WIDGET (gtk_builder_get_object (builder, "Win_1")); 
    g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit),NULL); 
    g_signal_connect(G_OBJECT (window), "key_press_event", G_CALLBACK (kp_event_S1_1), NULL); 
    gtk_widget_show_all(window);  
    gtk_main(); 
} 
+1

'gtk_entry_set_text'是正確的API。得到分段錯誤意味着entry1不是'GtkEntry *'實例或'buffer'不是NUL終止的字符串:這很簡單。 – ntd

+0

請張貼代碼。 – andlabs

+0

用代碼修改的問題。緩衝區是從另一個線程填充的 –

回答

0

你永遠不會從你的GtkBuilder分配entry1變量,所以entry1NULL在信號的時間和程序崩潰。你做了window;這樣做的entry1是類似的。