我正在This web sites tutorials设计我的Gui应用程序,但我遇到问题,在how do i could arrest the progress bar updating in clicking the Button Stop
实际上我看到了Gtk.ProgressBar.set_pulse_step()
,但我仍然看起来很奇怪,因为我不是专家。
这里我的代码错过了Stop函数。
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()
所以我正在寻找On_clicking_stop()
函数的正确代码。
答案 0 :(得分:1)
使用progressbar
更新GObject.timeout_add(50, self.on_timeout, None)
这是一个超时函数,它将继续调用指定的函数,直到返回False
为止。因此,为了使进度条停止更新,您必须以返回on_timeout
的方式更改False
。
例如可以这样做:
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