PyGTK - Lớp ProgressBar
Thanh tiến trình được sử dụng để cung cấp cho người dùng dấu hiệu trực quan về một quá trình đang chạy lâu dài. Tiện ích gtk.ProgressBar có thể được sử dụng ở hai chế độ - chế độ phần trăm và chế độ hoạt động.
Khi có thể ước tính chính xác lượng công việc đang chờ hoàn thành, thanh tiến trình có thể được sử dụng ở chế độ phần trăm và người dùng sẽ thấy thanh tăng dần hiển thị phần trăm công việc đã hoàn thành. Mặt khác, nếu có thể xác định chính xác khối lượng công việc cần hoàn thành, thì thanh tiến trình được sử dụng trong chế độ hoạt động, trong đó, thanh hiển thị hoạt động bằng cách hiển thị một khối di chuyển qua lại.
Hàm khởi tạo sau khởi tạo tiện ích con của lớp gtk.ProgressBar -
pb = gtk.ProgressBar()
gtk.ProgressBar sử dụng các phương pháp sau để quản lý chức năng:
ProgressBar.pulse()- Điều này thúc đẩy thanh tiến trình để cho biết rằng một số tiến bộ đã được thực hiện, nhưng bạn không biết là bao nhiêu. Phương pháp này cũng thay đổi chế độ thanh tiến trình thành "chế độ hoạt động", trong đó một khối được trả về qua lại.
ProgressBar.set_fraction(fraction) - Điều này khiến thanh tiến trình "điền vào" phần thanh được chỉ định bởi fraction. Giá trị củafraction phải nằm trong khoảng từ 0,0 đến 1,0.
ProgressBar.set_pulse_setup() - Điều này đặt phần (được chỉ định bởi fraction) của tổng chiều dài thanh tiến trình để di chuyển khối bị trả lại cho mỗi cuộc gọi đến pulse() phương pháp.
ProgressBar.set_orientation()- Điều này thiết lập hướng của thanh tiến trình. Nó có thể được đặt thành một trong các hằng số sau:
gtk.PROGRESS_LEFT_TO_RIGHT
gtk.PROGRESS_RIGHT_TO_LEFT
gtk.PROGRESS_BOTTOM_TO_TOP
gtk.PROGRESS_TOP_TO_BOTTOM
Trong chương trình sau, tiện ích gtk.ProgressBar được sử dụng trong chế độ hoạt động. Do đó, vị trí ban đầu của tiến trình được đặt thành 0,0 bởiset_fraction() phương pháp.
self.pb = gtk.ProgressBar()
self.pb.set_text("Progress")
self.pb.set_fraction(0.0)
Để tăng tiến trình thêm 1 phần trăm sau 100 mili giây, một đối tượng hẹn giờ được khai báo và một hàm gọi lại được thiết lập để gọi sau mỗi 100 mili giây để thanh tiến trình được cập nhật.
self.timer = gobject.timeout_add (100, progress_timeout, self)
Đây, progress_timeout()là chức năng gọi lại. Nó làm tăng tham số củaset_fraction() phương pháp 1 phần trăm và cập nhật văn bản trong thanh tiến trình để hiển thị phần trăm hoàn thành.
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
Thí dụ
Quan sát đoạn mã sau:
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()
Đoạn mã trên sẽ tạo ra kết quả sau:
Để sử dụng thanh tiến trình trong chế độ hoạt động, hãy thay đổi chức năng gọi lại thành sau và chạy:
def progress_timeout(pbobj):
pbobj.pb.pulse()
return True
Chuyển động qua lại của một khối bên trong thanh Tiến trình sẽ hiển thị tiến trình của hoạt động.