PageRenderTime 306ms CodeModel.GetById 91ms app.highlight 90ms RepoModel.GetById 121ms app.codeStats 0ms

/Lib/lib-tk/Canvas.py

http://unladen-swallow.googlecode.com/
Python | 194 lines | 175 code | 15 blank | 4 comment | 10 complexity | 9cb6ddd6cf5ab0e1404b1da15266e0b2 MD5 | raw file
  1# This module exports classes for the various canvas item types
  2
  3# NOTE: This module was an experiment and is now obsolete.
  4# It's best to use the Tkinter.Canvas class directly.
  5
  6from warnings import warnpy3k
  7warnpy3k("the Canvas module has been removed in Python 3.0", stacklevel=2)
  8del warnpy3k
  9
 10from Tkinter import Canvas, _cnfmerge, _flatten
 11
 12
 13class CanvasItem:
 14    def __init__(self, canvas, itemType, *args, **kw):
 15        self.canvas = canvas
 16        self.id = canvas._create(itemType, args, kw)
 17        if not hasattr(canvas, 'items'):
 18            canvas.items = {}
 19        canvas.items[self.id] = self
 20    def __str__(self):
 21        return str(self.id)
 22    def __repr__(self):
 23        return '<%s, id=%d>' % (self.__class__.__name__, self.id)
 24    def delete(self):
 25        del self.canvas.items[self.id]
 26        self.canvas.delete(self.id)
 27    def __getitem__(self, key):
 28        v = self.canvas.tk.split(self.canvas.tk.call(
 29                self.canvas._w, 'itemconfigure',
 30                self.id, '-' + key))
 31        return v[4]
 32    cget = __getitem__
 33    def __setitem__(self, key, value):
 34        self.canvas.itemconfig(self.id, {key: value})
 35    def keys(self):
 36        if not hasattr(self, '_keys'):
 37            self._keys = map(lambda x, tk=self.canvas.tk:
 38                             tk.splitlist(x)[0][1:],
 39                             self.canvas.tk.splitlist(
 40                                     self.canvas._do(
 41                                             'itemconfigure',
 42                                             (self.id,))))
 43        return self._keys
 44    def has_key(self, key):
 45        return key in self.keys()
 46    def __contains__(self, key):
 47        return key in self.keys()
 48    def addtag(self, tag, option='withtag'):
 49        self.canvas.addtag(tag, option, self.id)
 50    def bbox(self):
 51        x1, y1, x2, y2 = self.canvas.bbox(self.id)
 52        return (x1, y1), (x2, y2)
 53    def bind(self, sequence=None, command=None, add=None):
 54        return self.canvas.tag_bind(self.id, sequence, command, add)
 55    def unbind(self, sequence, funcid=None):
 56        self.canvas.tag_unbind(self.id, sequence, funcid)
 57    def config(self, cnf={}, **kw):
 58        return self.canvas.itemconfig(self.id, _cnfmerge((cnf, kw)))
 59    def coords(self, pts = ()):
 60        flat = ()
 61        for x, y in pts: flat = flat + (x, y)
 62        return self.canvas.coords(self.id, *flat)
 63    def dchars(self, first, last=None):
 64        self.canvas.dchars(self.id, first, last)
 65    def dtag(self, ttd):
 66        self.canvas.dtag(self.id, ttd)
 67    def focus(self):
 68        self.canvas.focus(self.id)
 69    def gettags(self):
 70        return self.canvas.gettags(self.id)
 71    def icursor(self, index):
 72        self.canvas.icursor(self.id, index)
 73    def index(self, index):
 74        return self.canvas.index(self.id, index)
 75    def insert(self, beforethis, string):
 76        self.canvas.insert(self.id, beforethis, string)
 77    def lower(self, belowthis=None):
 78        self.canvas.tag_lower(self.id, belowthis)
 79    def move(self, xamount, yamount):
 80        self.canvas.move(self.id, xamount, yamount)
 81    def tkraise(self, abovethis=None):
 82        self.canvas.tag_raise(self.id, abovethis)
 83    raise_ = tkraise # BW compat
 84    def scale(self, xorigin, yorigin, xscale, yscale):
 85        self.canvas.scale(self.id, xorigin, yorigin, xscale, yscale)
 86    def type(self):
 87        return self.canvas.type(self.id)
 88
 89class Arc(CanvasItem):
 90    def __init__(self, canvas, *args, **kw):
 91        CanvasItem.__init__(self, canvas, 'arc', *args, **kw)
 92
 93class Bitmap(CanvasItem):
 94    def __init__(self, canvas, *args, **kw):
 95        CanvasItem.__init__(self, canvas, 'bitmap', *args, **kw)
 96
 97class ImageItem(CanvasItem):
 98    def __init__(self, canvas, *args, **kw):
 99        CanvasItem.__init__(self, canvas, 'image', *args, **kw)
100
101class Line(CanvasItem):
102    def __init__(self, canvas, *args, **kw):
103        CanvasItem.__init__(self, canvas, 'line', *args, **kw)
104
105class Oval(CanvasItem):
106    def __init__(self, canvas, *args, **kw):
107        CanvasItem.__init__(self, canvas, 'oval', *args, **kw)
108
109class Polygon(CanvasItem):
110    def __init__(self, canvas, *args, **kw):
111        CanvasItem.__init__(self, canvas, 'polygon', *args, **kw)
112
113class Rectangle(CanvasItem):
114    def __init__(self, canvas, *args, **kw):
115        CanvasItem.__init__(self, canvas, 'rectangle', *args, **kw)
116
117# XXX "Text" is taken by the Text widget...
118class CanvasText(CanvasItem):
119    def __init__(self, canvas, *args, **kw):
120        CanvasItem.__init__(self, canvas, 'text', *args, **kw)
121
122class Window(CanvasItem):
123    def __init__(self, canvas, *args, **kw):
124        CanvasItem.__init__(self, canvas, 'window', *args, **kw)
125
126class Group:
127    def __init__(self, canvas, tag=None):
128        if not tag:
129            tag = 'Group%d' % id(self)
130        self.tag = self.id = tag
131        self.canvas = canvas
132        self.canvas.dtag(self.tag)
133    def str(self):
134        return self.tag
135    __str__ = str
136    def _do(self, cmd, *args):
137        return self.canvas._do(cmd, (self.tag,) + _flatten(args))
138    def addtag_above(self, tagOrId):
139        self._do('addtag', 'above', tagOrId)
140    def addtag_all(self):
141        self._do('addtag', 'all')
142    def addtag_below(self, tagOrId):
143        self._do('addtag', 'below', tagOrId)
144    def addtag_closest(self, x, y, halo=None, start=None):
145        self._do('addtag', 'closest', x, y, halo, start)
146    def addtag_enclosed(self, x1, y1, x2, y2):
147        self._do('addtag', 'enclosed', x1, y1, x2, y2)
148    def addtag_overlapping(self, x1, y1, x2, y2):
149        self._do('addtag', 'overlapping', x1, y1, x2, y2)
150    def addtag_withtag(self, tagOrId):
151        self._do('addtag', 'withtag', tagOrId)
152    def bbox(self):
153        return self.canvas._getints(self._do('bbox'))
154    def bind(self, sequence=None, command=None, add=None):
155        return self.canvas.tag_bind(self.id, sequence, command, add)
156    def unbind(self, sequence, funcid=None):
157        self.canvas.tag_unbind(self.id, sequence, funcid)
158    def coords(self, *pts):
159        return self._do('coords', pts)
160    def dchars(self, first, last=None):
161        self._do('dchars', first, last)
162    def delete(self):
163        self._do('delete')
164    def dtag(self, tagToDelete=None):
165        self._do('dtag', tagToDelete)
166    def focus(self):
167        self._do('focus')
168    def gettags(self):
169        return self.canvas.tk.splitlist(self._do('gettags', self.tag))
170    def icursor(self, index):
171        return self._do('icursor', index)
172    def index(self, index):
173        return self.canvas.tk.getint(self._do('index', index))
174    def insert(self, beforeThis, string):
175        self._do('insert', beforeThis, string)
176    def config(self, cnf={}, **kw):
177        return self.canvas.itemconfigure(self.tag, _cnfmerge((cnf,kw)))
178    def lower(self, belowThis=None):
179        self._do('lower', belowThis)
180    def move(self, xAmount, yAmount):
181        self._do('move', xAmount, yAmount)
182    def tkraise(self, aboveThis=None):
183        self._do('raise', aboveThis)
184    lift = tkraise
185    def scale(self, xOrigin, yOrigin, xScale, yScale):
186        self._do('scale', xOrigin, yOrigin, xScale, yScale)
187    def select_adjust(self, index):
188        self.canvas._do('select', ('adjust', self.tag, index))
189    def select_from(self, index):
190        self.canvas._do('select', ('from', self.tag, index))
191    def select_to(self, index):
192        self.canvas._do('select', ('to', self.tag, index))
193    def type(self):
194        return self._do('type')