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.