PyGTK - 进度条类



进度条用于向用户直观地指示长时间运行的进程的进度。gtk.ProgressBar 小部件可以用于两种模式——百分比模式和活动模式。

当能够准确估计有多少工作尚待完成时,进度条可以使用百分比模式,用户会看到一个递增的条形,显示已完成工作的百分比。另一方面,如果无法准确确定要完成的工作量,则进度条将使用活动模式,其中条形通过显示一个左右移动的块来显示活动。

以下构造函数初始化 gtk.ProgressBar 类的窗口小部件:

pb = gtk.ProgressBar()

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

  • ProgressBar.pulse() - 这会轻微推动进度条,以表明已取得一些进展,但您不知道具体进展了多少。此方法还会将进度条模式更改为“活动模式”,其中一个块会来回弹跳。

  • ProgressBar.set_fraction(fraction) - 这会导致进度条“填充”由fraction指定的条形部分。fraction的值应介于 0.0 和 1.0 之间。

  • ProgressBar.set_pulse_setup() - 这会设置每次调用pulse()方法时要移动弹跳块的总进度条长度的百分比(由fraction指定)。

  • 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()是回调函数。它将set_fraction()方法的参数增加 1%,并在进度条中更新文本以显示完成的百分比。

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

示例

观察以下代码:

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 Demo
广告

© . All rights reserved.