Код:
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
gtk_init (&argc, &argv);
// Основное окно
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
// Шкала процесса выполнения
GtkWidget *pbar = gtk_progress_bar_new();
// Рамка с надписью
GtkWidget *frame = gtk_frame_new("Шкала выполнения процесса");
// Устанавливаем размер окна по умолчанию
gtk_window_set_default_size( (GtkWindow*)window, 400, -1);
// Упаковываем шкалу в рамку с надписью
gtk_container_add (GTK_CONTAINER (frame), pbar);
// Упаковываем рамку в окно
gtk_container_add (GTK_CONTAINER (window), frame);
// Подключаем обработчик к сигналу delete_event
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (gtk_widget_hide_all), window);
// Отображаем сформированные виджеты
gtk_widget_show(pbar);
gtk_widget_show(frame);
gtk_widget_show(window);
gint cnt;
gdouble value = 0;
gchar *text;
for(cnt = 0; cnt <= 10000; cnt++)
{
// Формируем значение шкалы выполнения
value = ((gdouble)cnt/10000);
// Формируем текст для шкалы согласно процента выполнения
text = g_strdup_printf("%d%%", cnt/100);
// Устанавливаем текст в шкалу
gtk_progress_bar_set_text(GTK_PROGRESS_BAR( pbar), text);
// Устанавливаем значение шкалы выполнения
gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR( pbar), value);
// Обязательная строчка для обновления отображения шкалы
while (gtk_events_pending()) gtk_main_iteration_do(FALSE);
// Продолжаем выполнение цикла при достижении конца
if(cnt == 10000)
cnt = 0;
// Завершаем цикл если окно программы закрыто
if(!GTK_WIDGET_VISIBLE(window))
break;
}
return 0;
}
Скомпилировать пример можно командой
gcc `pkg-config --cflags --libs gtk+-2.0` pbarexample.c -o pbarexample
при условии что в вашей системе установлено всё необходимое, а код находится в файле pbarexample.c
Подробности:
http://linfoline.homedns.org/gtk-2.10-refe...rogressBar.html
http://linfoline.homedns.org/gtk/x849.html