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
การเคลื่อนไหวไปมาของบล็อกภายในแถบความคืบหน้าจะแสดงความคืบหน้าของกิจกรรม