Обновление текстовой записи 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 ответ

Вы никогда не назначали entry1 переменная из вашего GtkBuilder, так entry1 все еще NULL во время сигнала, и программа вылетает. Вы сделали это для window; делает это для entry1 похож.

Другие вопросы по тегам