вставьте bash как виджет в gtk - PullRequest
1 голос
/ 12 августа 2010

Когда вы пишете программу на c, которая имеет много printf для многих целей: отладки, информации и т. Д. Я хотел бы сделать что-то подобное в gtk, имея некоторый виджет, который отображал бы все сообщения printf, которые я обычнобудет делать в обычной программе c

Спасибо,

--- ОБНОВЛЕНИЕ --- Я использую vte, как советовал ptomato.Хотя возникли некоторые проблемы.Я использовал glade-3, и когда файл glade был открыт, виджет vte не показывался.Я замечаю, что при открытии отображается много предупреждений и 2 критических ошибки.Одним из таких критических было

Unable to load module 'vte' from any search paths

Я установил libvte-dev через apt-get и знаю, что вижу как в палитре виджетов

Ответы [ 4 ]

1 голос
/ 12 августа 2010

Вы можете использовать VTE, виджет эмулятора терминала. Я не уверен, но я думаю, что вы можете перенаправить stdout вашей программы на виджет, используя vte_terminal_set_pty().

0 голосов
/ 12 августа 2010

Вы должны просто использовать GtkTextView и использовать эти функции для перенаправления вашего входа в него:

  • g_log_set_default_handler () для g_message () / g_warning () / и т. Д.(все, что проходит через g_log ())
  • g_set_print_handler () (для g_print ())
  • g_set_printerr_handler () (для g_printerr ())

К сожалению,простой printf () не может быть легко перенаправлен (но g_print () является его хорошей заменой).

PS: Извините, я могу вставить только одну ссылку для вас (новый пользователь)...

0 голосов
/ 12 августа 2010

Вы можете создать текстовое представление или использовать метку .

Добавить текстовое представление в родительское окно, скажем, Главное окно Gtk . Вы можете решить, какие другие виджеты добавить. (может быть окном прокрутки, а затем текстовым представлением).

Используйте API gtk_text_view_set_buffer для отображения текста в окне каждый раз, когда вы хотите отобразить журнал.

0 голосов
/ 12 августа 2010

Вы можете использовать asprintf () как расширение GNU для выполнения форматированного вывода, который хранится в новой выделенной памяти и должен быть освобожден позже.

char* str;
asprintf(&str, "It is a number %d\n", 1);
//...
free(str);

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

char str[100];
snprintf(str, 100, "It is number %d\n", 1);

Также вы можете использовать g_string_printf (), которая является функцией glib, но она сохраняет отформатированный вывод в переменную GString.

GString str;
g_string_printf(&str, "It is number %d\n", 1);
//...
g_string_free(&str, TRUE);

Когда вы получили свою строку в виде форматированного вывода, вы можете использовать ее как текст для любого виджета GTK.

...