Python – GTK+ 3 中的进度条
ProgressBar 用于显示长时间运行的操作的进度。 Gtk.ProgressBar 可以在两种不同的模式下使用——
- 百分比模式
- 活动模式。
当应用程序可以确定剩余的工作量时,我们可以在百分比模式下使用 Gtk.ProgressBar。在这种模式下,应用程序需要定期调用Gtk.ProgressBar.set_fraction()来更新进度条,传递一个介于 0 和 1 之间的浮点数来提供新的百分比值。
当应用程序无法确定要完成的工作量时,它可以使用活动模式,该模式通过在进度区域内来回移动的块来显示活动。在这种模式下,应用程序需要定期调用Gtk.ProgressBar.pulse()来更新进度条。我们可以使用Gtk.ProgressBar.set_pulse_step()方法选择步长。默认情况下,Gtk.ProgressBar 是水平的并且是从左到右的,但是您可以使用Gtk.ProgressBar.set_orientation()方法将其更改为垂直进度条。可以使用Gtk.ProgressBar.set_inverted() 更改进度条的增长方向。 Gtk.ProgressBar 还可以包含可以通过调用Gtk.ProgressBar.set_text()和Gtk.ProgressBar.set_show_text()设置的文本。
例子 :
Python3
from gi.repository import Gtk, GLib
import gi
# Since a system can have multiple versions
# of GTK + installed, we want to make
# sure that we are importing GTK + 3.
gi.require_version("Gtk", "3.0")
class ProgressBarWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="ProgressBar Demo")
self.set_border_width(10)
vbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
self.add(vbox)
# Create a ProgressBar
self.progressbar = Gtk.ProgressBar()
vbox.pack_start(self.progressbar, True, True, 0)
# Create CheckButton with labels "Show text",
# "Activity mode", "Right to Left" respectively
button = Gtk.CheckButton(label="Show text")
button.connect("toggled", self.on_show_text_toggled)
vbox.pack_start(button, True, True, 0)
button = Gtk.CheckButton(label="Activity mode")
button.connect("toggled", self.on_activity_mode_toggled)
vbox.pack_start(button, True, True, 0)
button = Gtk.CheckButton(label="Right to Left")
button.connect("toggled", self.on_right_to_left_toggled)
vbox.pack_start(button, True, True, 0)
self.timeout_id = GLib.timeout_add(50, self.on_timeout, None)
self.activity_mode = False
def on_show_text_toggled(self, button):
show_text = button.get_active()
if show_text:
text = "Geek For Geeks"
else:
text = None
self.progressbar.set_text(text)
self.progressbar.set_show_text(show_text)
def on_activity_mode_toggled(self, button):
self.activity_mode = button.get_active()
if self.activity_mode:
self.progressbar.pulse()
else:
self.progressbar.set_fraction(0.0)
def on_right_to_left_toggled(self, button):
value = button.get_active()
self.progressbar.set_inverted(value)
def on_timeout(self, user_data):
"""
Update value on the progress bar
"""
if self.activity_mode:
self.progressbar.pulse()
else:
new_value = self.progressbar.get_fraction() + 0.01
if new_value > 1:
new_value = 0
self.progressbar.set_fraction(new_value)
return True
win = ProgressBarWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
输出 :