|
From: <ry...@us...> - 2010-04-20 19:41:44
|
Revision: 8251
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8251&view=rev
Author: ryanmay
Date: 2010-04-20 19:41:38 +0000 (Tue, 20 Apr 2010)
Log Message:
-----------
Add TimerGTK and new_timer() method.
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py 2010-04-20 19:40:12 UTC (rev 8250)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py 2010-04-20 19:41:38 UTC (rev 8251)
@@ -23,7 +23,7 @@
from matplotlib import verbose
from matplotlib._pylab_helpers import Gcf
from matplotlib.backend_bases import RendererBase, GraphicsContextBase, \
- FigureManagerBase, FigureCanvasBase, NavigationToolbar2, cursors
+ FigureManagerBase, FigureCanvasBase, NavigationToolbar2, cursors, TimerBase
from matplotlib.backends.backend_gdk import RendererGDK, FigureCanvasGDK
from matplotlib.cbook import is_string_like, is_writable_file_like
from matplotlib.colors import colorConverter
@@ -90,6 +90,46 @@
return manager
+class TimerGTK(TimerBase):
+ '''
+ Subclass of :class:`backend_bases.TimerBase` that uses GTK for timer events.
+
+ Attributes:
+ * interval: The time between timer events in milliseconds. Default
+ is 1000 ms.
+ * single_shot: Boolean flag indicating whether this timer should
+ operate as single shot (run once and then stop). Defaults to False.
+ * callbacks: Stores list of (func, args) tuples that will be called
+ upon timer events. This list can be manipulated directly, or the
+ functions add_callback and remove_callback can be used.
+ '''
+ from gobject import timeout_add as _add_timeout
+ from gobject import source_remove as _remove_timeout
+ def _timer_start(self):
+ self._timer = self._add_timeout(self._interval, self._on_timer)
+
+ def _timer_stop(self):
+ if self._timer is not None:
+ self._remove_timeout(self._timer)
+ self._timer = None
+
+ def _timer_set_interval(self):
+ if self._timer is not None:
+ self._timer_stop()
+ self._timer_start()
+
+ def _on_timer(self):
+ TimerBase._on_timer(self)
+
+ # Gtk timeout_add() requires that the callback returns True if it
+ # is to be called again.
+ if len(self.callbacks) > 0 and not self._single:
+ return True
+ else:
+ self._timer = None
+ return False
+
+
class FigureCanvasGTK (gtk.DrawingArea, FigureCanvasBase):
keyvald = {65507 : 'control',
65505 : 'shift',
@@ -410,6 +450,13 @@
def get_default_filetype(self):
return 'png'
+ def new_timer(self):
+ """
+ Creates a new backend-specific subclass of
+ :class:`backend_bases.TimerBase`. This is useful for getting periodic
+ events through the backend's native event loop.
+ """
+ return TimerGTK()
def flush_events(self):
gtk.gdk.threads_enter()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|