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 ถูกใช้ในโหมดกิจกรรม ดังนั้นตำแหน่งเริ่มต้นของความคืบหน้าจึงถูกตั้งค่าเป็น 0.0 โดยset_fraction() วิธี.

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

เพื่อเพิ่มความคืบหน้าขึ้น 1 เปอร์เซ็นต์หลังจาก 100 มิลลิวินาทีจะมีการประกาศออบเจ็กต์ตัวจับเวลาและฟังก์ชันเรียกกลับจะถูกเรียกใช้หลังจากทุกๆ 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

การเคลื่อนไหวไปมาของบล็อกภายในแถบความคืบหน้าจะแสดงความคืบหน้าของกิจกรรม