Pygtk 简明教程

PyGTK - ProgressBar Class

进度条用于向用户提供长时间运行进程的视觉指示。gtk.ProgressBar 控件可在两种模式中使用 — 百分比模式和活动模式。

如果能够非常准确地估算待完成的工作量,则进度条可用于百分比模式,且用户可看到显示已完成工作百分比的增量条形。另一方面,如果可准确确定待完成的工作量,则进度条用于活动模式,其中,进度条通过显示一个来回移动的块来显示活动。

以下构造函数初始化 gtk.ProgressBar 类的控件 −

pb = gtk.ProgressBar()

gtk.ProgressBar 使用以下方法来管理功能 −

  1. ProgressBar.pulse() − 这会轻推进度条以指示已取得一定进度,但您不知道取得多大的进度。此方法还会将进度条模式更改为“活动模式”,其中一个块会来回跳动。

  2. ProgressBar.set_fraction(fraction) − 这会使进度条“填充”由 fraction 指定的进度条部分。 fraction 的值应介于 0.0 和 1.0 之间。

  3. ProgressBar.set_pulse_setup() − 这将设置进度条总长度的部分(由 fraction 指定)以针对对 pulse() 方法的每次调用移动反弹块。

  4. ProgressBar.set_orientation() − 这将设置进度条的方向。它可以设置为以下常量之一: gtk.PROGRESS_LEFT_TO_RIGHT gtk.PROGRESS_RIGHT_TO_LEFT gtk.PROGRESS_BOTTOM_TO_TOP gtk.PROGRESS_TOP_TO_BOTTOM

在以下程序中,gtk.ProgressBar 控件用于活动模式。因此,进度的初始位置由 set_fraction() 方法设置为 0.0。

self.pb = gtk.ProgressBar()
self.pb.set_text("Progress")
self.pb.set_fraction(0.0)

为了在 100 毫秒后将进度增加 1%,将声明一个计时器对象并设置一个回调函数,以便在每 100 毫秒后调用该函数,从而更新进度条。

self.timer = gobject.timeout_add (100, progress_timeout, self)

此处, progress_timeout() 是回调函数。它以 1% 的幅度增加 set_fraction() 方法的参数,并更新进度条中的文本以显示完成百分比。

def progress_timeout(pbobj):
   new_val = pbobj.pb.get_fraction() + 0.01
   pbobj.pb.set_fraction(new_val)
   pbobj.pb.set_text(str(new_val*100)+" % completed")
   return True

Example

观察以下代码 -

import gtk, gobject

def progress_timeout(pbobj):
   new_val = pbobj.pb.get_fraction() + 0.01
   pbobj.pb.set_fraction(new_val)
   pbobj.pb.set_text(str(new_val*100)+" % completed")
   return True

class PyApp(gtk.Window):

   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Progressbar demo")
      self.set_size_request(300,200)
      self.set_position(gtk.WIN_POS_CENTER)

      fix = gtk.Fixed()
      self.pb = gtk.ProgressBar()
      self.pb.set_text("Progress")
      self.pb.set_fraction(0.0)

      fix.put(self.pb,80,100)
      self.add(fix)
      self.timer = gobject.timeout_add (100, progress_timeout, self)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
PyApp()
gtk.main()

上述代码将生成以下输出 −

progressbar demo

要以活动模式使用进度条,请将回调函数更改为以下内容并运行 −

def progress_timeout(pbobj):
   pbobj.pb.pulse()
   return True

进度条内的块来回移动将显示活动的进度。

progressbar demo1