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()
отформатировать число в строковый буфер.