GTK - Как обновить gtktextview/gtkentry? #C

Я создаю базовую станцию ​​управления землей для CubeSat, разделяя ее на две части: КОМАНДЫ (без проблем) и ТЕЛЕМЕТРИЯ. Я использую код C и GTK; в окне телеметрии мне нужно показывать некоторую информацию каждый раз при получении пакета телеметрии, поэтому я пытался использовать gtkview/gtkentry для каждой информации, но я не знаю, как обновить сообщение, отображаемое в них.

В частности, пример:

//View PACKET NUMBER    
 view = gtk_text_view_new();
 frame = gtk_frame_new("Packet number");    
 gtk_container_add(GTK_CONTAINER(frame), view);
 gtk_text_view_set_editable(GTK_TEXT_VIEW(view),FALSE);
 gtk_table_attach(GTK_TABLE(table2),frame,0,1,0,1,GTK_FILL,GTK_FILL,5,5);
 buff = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
 gtk_text_buffer_get_iter_at_offset(buff, &iter, 0);
 gtk_text_buffer_insert(buff, &iter,"waiting", -1);

Итак, сначала есть текст "ОЖИДАНИЕ", затем, когда пакет получен, я хочу обновить этот текст: как я могу это сделать?

Я пытался повторить этот код, но изменил "ожидание" с переменной, ссылающейся на "номер пакета", но я получаю дамп ядра

Я также пытался с этим кодом, но у меня всегда одна и та же проблема.

viewprova = gtk_entry_new();
frameprova = gtk_frame_new("Packet number");
gtk_container_add(GTK_CONTAINER(frameprova), viewprova);
gtk_entry_set_editable(GTK_ENTRY(viewprova),FALSE);
gtk_table_attach(GTK_TABLE(table2),frameprova,0,1,0,1,GTK_FILL,GTK_FILL,5,5);
gtk_entry_set_text(GTK_ENTRY(viewprova),"waiting");



frameprova = gtk_frame_new("Packet number");    
viewprova = gtk_label_new ("waiting");
gtk_container_add(GTK_CONTAINER(frameprova), viewprova);
gtk_table_attach(GTK_TABLE(table2),frameprova,0,1,0,1,GTK_FILL,GTK_FILL,5,5);   

Спасибо за помощь!

2 ответа

Итак, если я вас правильно понял, вы знаете, как настроить виджеты для отображения текста, но нет, как правильно заполнить их новым содержимым, правильно? Посмотрите на свой код и на то, что вы делаете. Сначала вы создаете текстовый виджет. Затем вы заполняете его исходным текстом. Это вторая часть, которую вы повторяете:

В случае GtkEntry, gtk_entry_set_text(GTK_ENTRY(viewprova), "My new text");

В случае GtkTextView (на самом деле вы используете базовый TextBuffer), gtk_text_buffer_set_text(buff, "My new text", -1);

Функция, такая как gtk_label_new() который принимает строку C, не может вместо этого принимать целое число, функции C не являются полиморфными. Вам нужно создать строковое представление и передать его, например, используя snprintf() отформатировать число в строковый буфер.

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