GTK+ в примерах (шкала выполнения процесса)

Модератор: Модераторы разделов

Аватара пользователя
sergeyvp
Сообщения: 807
ОС: ubuntu

GTK+ в примерах

Сообщение sergeyvp »

Простой пример использования шкалы выполнения процесса в процентном режиме.

Код:

#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
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: GTK+ в примерах

Сообщение Zeus »

Это опять я.
Вопрос: в Gtk есть возможность послать асинхронный сигнал виджету?
Спасибо сказали:
Аватара пользователя
sergeyvp
Сообщения: 807
ОС: ubuntu

Re: GTK+ в примерах

Сообщение sergeyvp »

Zeus писал(а):
17.07.2007 16:17
Вопрос: в Gtk есть возможность послать асинхронный сигнал виджету?

Всё что связано с сигналами в gtk+ описано вот тут
http://developer.gnome.org/doc/API/2.0/gob...ct-Signals.html
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: GTK+ в примерах

Сообщение Zeus »

Я это видел.
Это действительно "всё, что связано с сигналами в gtk+"? :mellow:
Спасибо сказали:
Аватара пользователя
sergeyvp
Сообщения: 807
ОС: ubuntu

Re: GTK+ в примерах

Сообщение sergeyvp »

Zeus писал(а):
17.07.2007 18:10
Я это видел.
Это действительно "всё, что связано с сигналами в gtk+"? :mellow:

Скорей всего да. :)
Можно ещё в исходниках порыться :)
Спасибо сказали:
andy128k
Сообщения: 28
ОС: GNU/Linux

Re: GTK+ в примерах

Сообщение andy128k »

Zeus писал(а):
17.07.2007 16:17
Это опять я.
Вопрос: в Gtk есть возможность послать асинхронный сигнал виджету?


Не совсем сигнал, но что-то: g_idle_add.
Спасибо сказали: