【发布时间】:2017-11-22 10:13:05
【问题描述】:
我已经用 vala 做了一个应用程序,在某些时候我必须处理很多文件。我创建了一个窗口来选择一个文件夹,然后我获取文件的路径并对它们进行一些处理。
我在此窗口中添加了一个进度条,以显示已处理的文件数量,但由于某种原因,它始终为空。 关于窗口的代码:
this.files_window = new Gtk.Window();
this.files_window.window_position = Gtk.WindowPosition.CENTER;
this.files_window.destroy.connect (Gtk.main_quit);
// VBox:
Gtk.Box vbox = new Gtk.Box (Gtk.Orientation.VERTICAL, 5);
this.files_window.add (vbox);
// Buttons to open and close
Gtk.Button cancel = new Gtk.Button.with_label ("Cancel");
Gtk.Button select = new Gtk.Button.with_label ("Select");
vbox.add (select);
vbox.add (cancel);
// proogress bar
this.progress_bar = new Gtk.ProgressBar();
vbox.add(this.progress_bar);
// conect select to method do_stuff
select.clicked.connect (do_stuff);
this.files_window.show_all ();
如您所见,我将“select”按钮连接到“do_stuff”方法,在该方法中我获取所选文件的路径并进行一些处理。
我正确地更新了进度条的分数,因为我添加了一些打印来了解值是否正确。只是窗口没有刷新,可能是因为它正在处理文件的所有工作。下面是 do_stuff() 方法的代码:
// some proces to get paths of files in the list sfiles
double fraction = 0.0;
this.progress_bar.set_fraction (fraction);
int processed_files = 0;
foreach (string sfile in sfiles) {
do_some_proces_to_file(sfile);
processed_files += 1;
fraction = (double)processed_files/(double)sfiles.length;
this.progress_bar.set_fraction (fraction);
stdout.printf("Real fraction: %f\n", this.progress_bar.get_fraction());
}
printf 显示进度条的值正在更新,但在窗口中进度条始终为空。
我错过了什么吗?这是做进度条的正确方法吗?我应该创建另一个线程来做这些事情吗?
【问题讨论】:
标签: gtk progress-bar vala