PyGTK 进度条类
进度条是用来给用户提供一个长期运行的进程的视觉指示。gtk.ProgressBar widget可以在两种模式下使用 – 百分比模式和活动模式。
当有可能准确地估计出有多少工作有待完成时,进度条可以在百分比模式下使用,用户可以看到一个显示已完成工作百分比的增量条。另一方面,如果可以准确地确定要完成的工作量,进度条可以在活动模式下使用,其中,进度条通过显示一个来回移动的块来显示活动。
下面的构造函数初始化了gtk.ProgressBar类的部件-
pb = gtk.ProgressBar()
gtk.ProgressBar使用以下方法来管理功能 −
- ProgressBar.pulse() – 这个方法点动进度条,表示已经取得了一些进展,但你不知道有多少。这个方法还可以将进度条模式改为 “活动模式”,即一个块来回跳动。
-
ProgressBar.set_fraction(fraction) – 这将使进度条 “填满 “由 fraction 指定的部分 。 fraction 的值应该在0.0和1.0之间。
-
ProgressBar.set_pulse_setup() – 这将设置进度条总长度的一部分(由 fraction 指定),以便在每次调用 pulse() 方法时移动弹跳块。
-
ProgressBar.set_orientation() – 这是设置进度条的方向。它可以被设置为以下常数之一。
- gtk.PROGRESS_LEFT_TO_RIGHT
-
gtk.PROGRESS_RIGHT_TO_LEFT
-
gtk.PROGRESS_BOTTOM_TO_TOP
-
gtk.PROGRESS_TOP_TO_BOTTOM
- gtk.PROGRESS_LEFT_TO_RIGHT
在下面的程式中, gtk.ProgressBar widget被用在活動模式中.因此, 进度的初始位置被 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()
上述代码将产生以下输出 –
要在活动模式下使用进度条,请将回调函数改为以下内容并运行—-。
def progress_timeout(pbobj):
pbobj.pb.pulse()
return True
进度条内的块的前后移动将显示活动的进度。