def timer(self, name, delay, callback, *data, **kwdata):
"""
Runs callback after specified number of seconds. Uses
GLib.timeout_add_seconds with small wrapping to allow named
timers to be canceled by reset() call
"""
method = GLib.timeout_add_seconds
if delay < 1 and delay > 0:
method = GLib.timeout_add
delay = delay * 1000.0
if name is None:
# No wrapping is needed, call GLib directly
method(delay, callback, *data, **kwdata)
else:
if name in self._timers:
# Cancel old timer
GLib.source_remove(self._timers[name])
# Create new one
self._timers[name] = method(delay, self._callback, name, callback, *data, **kwdata)
python类source_remove()的实例源码
def _gtk_configure(self, widget, event):
def resize(*args):
self._resize_timer_id = None
width, height = self._window.get_size()
columns = width // self._cell_pixel_width
rows = height // self._cell_pixel_height
if self._screen.columns == columns and self._screen.rows == rows:
return
self._bridge.resize(columns, rows)
if not self._screen:
return
if event.width == self._pixel_width and \
event.height == self._pixel_height:
return
if self._resize_timer_id is not None:
GLib.source_remove(self._resize_timer_id)
self._resize_timer_id = GLib.timeout_add(250, resize)
def on_working_menu_item(self, widget):
if self.wid == 0:
self.working_menu_item.set_label(_('Stop'))
self.indicator.set_icon(comun.STATUS_ICON[self.theme][0])
if self.show_notifications:
self.notification.update('Backlight-Indicator',
_('Session starts'),
comun.STATUS_ICON[self.theme][0])
self.do_the_work()
self.wid = GLib.timeout_add_seconds(self.sample_time * 60,
self.do_the_work)
else:
self.working_menu_item.set_label(_('Start'))
self.indicator.set_icon(comun.STATUS_ICON[self.theme][1])
if self.show_notifications:
self.notification.update('Backlight-Indicator',
_('Session stops'),
comun.STATUS_ICON[self.theme][1])
GLib.source_remove(self.wid)
self.wid = 0
if self.show_notifications:
self.notification.show()