PyGTK - ProgressBar 类

  • 简述

    进度条用于为用户提供长时间运行过程的视觉指示。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()- 这将设置部分(由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.ProgressBar 小部件用于活动模式。因此,进度的初始位置由set_fraction()方法。
    
    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
    
    进度条内块的来回移动将显示活动的进度。
    进度条演示