انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: چطور میشه یک progress bar با gtk3 ایجاد کرد؟  (دفعات بازدید: 941 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین Bloordokani3412

  • Newbie
  • *
  • ارسال: 17
  • جنسیت : پسر
سلام

من در کد زیر یک بخش دارم که به پردازش تصویر با اپن سی وی مربوط می شود. این بخش یک ران تایم دارد که من می خوام برای اون در طول زمانی که برنامه در حال اجرا هست یک progress bar بسازم و درصد پیشرفت برنامه رو ببینم.

#include <opencv2/opencv.hpp>
#include <gtk/gtk.h>
#include <time.h>

using namespace cv;
using namespace std;

gboolean Func (gpointer data) {
    gdouble value;
    GString *text;

    //part of code that generate run time
    clock_t start, end;
    start = clock();

    Mat image, src1, DENO;
    image = imread("C:/Users/Alireza/Desktop/1.png");
    cvtColor(image, src1, CV_RGB2GRAY);
    fastNlMeansDenoising(src1, DENO, 19, 29, 38);
    imwrite("DENO.png", DENO);

    end = clock();
    int runtime = ((int)(end - start)) / CLOCKS_PER_SEC;
    cout << "Time1 = " << runtime << "s" << endl;


    //part of code that I want to show run time progress by progress bar
    value = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(data));

    value += 0.01;
    if (value > 1.0) {
        value = 0.0;
    }

    text = g_string_new(gtk_progress_bar_get_text(GTK_PROGRESS_BAR(data)));
    g_string_sprintf(text, "%d%%", (int)(value * 100));
    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(data), value);
    gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(data), TRUE);
    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(data), text->str);

    while (gtk_events_pending())
        gtk_main_iteration();

    return TRUE;
}

int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *progressBar;
gint timer;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GtkProgressBar");
gtk_window_set_default_size(GTK_WINDOW(window), 300, 30);

progressBar = gtk_progress_bar_new();
timer = g_timeout_add(100, Func, progressBar);

gtk_container_add(GTK_CONTAINER(window), progressBar);

gtk_widget_show_all(window);

gtk_main();

return 0;

}


اما مشکل اینجاست که پیشرفت برنامه همزمان با زمانی که اون در حال ران شدن هست نشون داده نمیشه. من تو زمینه کار با جی تی کا ۳ تازه کار هستم. دوستانی که تو این زمینه وارد هستد اگر امکانش هست به من کمک کنید تا این مشکلم حل بشه.
« آخرین ویرایش: 13 دی 1395، 09:47 ب‌ظ توسط Bloordokani3412 »

آفلاین Bloordokani3412

  • Newbie
  • *
  • ارسال: 17
  • جنسیت : پسر
پاسخ : چطور میشه یک progress bar با gtk3 ایجاد کرد؟
« پاسخ #1 : 18 دی 1395، 04:05 ب‌ظ »
کسی نیست کمک نه؟؟ :'(