Reputation: 61
I'm working on This web sites tutorials for designing my Gui application, but i face problem, in how do i could arrest the progress bar updating in clicking the Button Stop
Actually i see about Gtk.ProgressBar.set_pulse_step()
but i still look strange because i am not expert.
Here my code where missed the Stop function.
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
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.VERTICAL, spacing=6)
self.add(vbox)
self.progressbar = Gtk.ProgressBar()
vbox.pack_start(self.progressbar, True, True, 0)
button = Gtk.Button(label="Start")
button.connect("clicked", self.On_clicking)
vbox.pack_start(button, True, True, 0)
button = Gtk.Button(label="Stop")
button.connect("clicked", self.On_clicking_stop)
vbox.pack_start(button, True, True, 0)
def On_clicking(self, widget):
self.timeout_id = GObject.timeout_add(50, self.on_timeout, None)
self.activity_mode = False
def On_clicking_stop(self, widget):
## I have to stop the Progress Bar on Stop Button click
##
##
##
##
##
return False
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)
# As this is a timeout function, return True so that it
# continues to get called
return True
win = ProgressBarWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
So i'm looking for the right code of On_clicking_stop()
function.
Upvotes: 0
Views: 610
Reputation: 4532
The progressbar
is updated using GObject.timeout_add(50, self.on_timeout, None)
this is a timeout function that will keep making calls to the specified function till False
is returned. Thus in order to make the progressbar stop updating you will have to change on_timeout
in such a way that it returns False
.
This can for example be done like this:
def On_clicking(self, widget):
self.activity_mode = False
self.updating = True
self.timeout_id = GObject.timeout_add(50, self.on_timeout, None)
def On_clicking_stop(self, widget):
self.updating = False
return True
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)
# As this is a timeout function, return True so that it
# continues to get called
return self.updating
Upvotes: 1