在gtk中插入一个像widget一样的bash

时间:2010-08-12 02:54:03

标签: c user-interface gtk glade

当你在c中编写一个程序时,它有很多用于很多目的的printf:debuggin,information等。我想在gtk中做类似的事情,有一些小部件会显示我通常的所有printf消息会做一个正常的c程序

谢谢,

--- --- UPDATE 我正在使用vte作为ptomato建议。虽然出现了一些问题。 我正在使用glade-3,当文件glade打开时,vte小部件没有显示。我注意到打开时会显示很多警告和2个严重错误。其中一个关键是

Unable to load module 'vte' from any search paths

我安装了libvte-dev throug apt-get并且知道我在widget调色板中看到了

4 个答案:

答案 0 :(得分:1)

您可以使用终端模拟器小部件VTE。我不确定,但我认为您可以使用vte_terminal_set_pty()将程序的stdout重定向到窗口小部件。

答案 1 :(得分:0)

您可以使用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小部件的文本。

答案 2 :(得分:0)

您可以创建text view或使用label

将此文本视图添加到父窗口说Gtk Main window。您可以决定添加哪些其他小部件。 (可以是滚动窗口,然后是文本视图)。

每次要显示日志时,使用api gtk_text_view_set_buffer显示窗口上的文本。

答案 3 :(得分:0)

您应该只使用GtkTextView并使用这些函数将日志记录重定向到它:

  • g_log_set_default_handler()代表g_message()/ g_warning()/ etc。 (通过g_log()的所有内容)
  • g_set_print_handler()(对于g_print())
  • g_set_printerr_handler()(对于g_printerr())

不幸的是,简单的printf()无法轻易重定向(但g_print()是它的一个很好的替代品。)

PS:抱歉,我只能为您粘贴一个链接(新用户)......