# This module exports classes for the various canvas item types
# NOTE: This module was an experiment and is now obsolete.
# It's best to use the Tkinter.Canvas class directly.
from Tkinter
import Canvas
, _cnfmerge
, _flatten
def __init__(self
, canvas
, itemType
, *args
, **kw
):
self
.id = canvas
._create
(itemType
, args
, kw
)
if not hasattr(canvas
, 'items'):
canvas
.items
[self
.id] = self
return '<%s, id=%d>' % (self
.__class
__.__name
__, self
.id)
del self
.canvas
.items
[self
.id]
self
.canvas
.delete(self
.id)
def __getitem__(self
, key
):
v
= self
.canvas
.tk
.split(self
.canvas
.tk
.call(
self
.canvas
._w
, 'itemconfigure',
def __setitem__(self
, key
, value
):
self
.canvas
.itemconfig(self
.id, {key
: value
})
if not hasattr(self
, '_keys'):
self
._keys
= map(lambda x
, tk
=self
.canvas
.tk
:
self
.canvas
.tk
.splitlist(
return key
in self
.keys()
def __contains__(self
, key
):
return key
in self
.keys()
def addtag(self
, tag
, option
='withtag'):
self
.canvas
.addtag(tag
, option
, self
.id)
x1
, y1
, x2
, y2
= self
.canvas
.bbox(self
.id)
return (x1
, y1
), (x2
, y2
)
def bind(self
, sequence
=None, command
=None, add
=None):
return self
.canvas
.tag_bind(self
.id, sequence
, command
, add
)
def unbind(self
, sequence
, funcid
=None):
self
.canvas
.tag_unbind(self
.id, sequence
, funcid
)
def config(self
, cnf
={}, **kw
):
return self
.canvas
.itemconfig(self
.id, _cnfmerge((cnf
, kw
)))
def coords(self
, pts
= ()):
for x
, y
in pts
: flat
= flat
+ (x
, y
)
return self
.canvas
.coords(self
.id, *flat
)
def dchars(self
, first
, last
=None):
self
.canvas
.dchars(self
.id, first
, last
)
self
.canvas
.dtag(self
.id, ttd
)
self
.canvas
.focus(self
.id)
return self
.canvas
.gettags(self
.id)
def icursor(self
, index
):
self
.canvas
.icursor(self
.id, index
)
return self
.canvas
.index(self
.id, index
)
def insert(self
, beforethis
, string
):
self
.canvas
.insert(self
.id, beforethis
, string
)
def lower(self
, belowthis
=None):
self
.canvas
.tag_lower(self
.id, belowthis
)
def move(self
, xamount
, yamount
):
self
.canvas
.move(self
.id, xamount
, yamount
)
def tkraise(self
, abovethis
=None):
self
.canvas
.tag_raise(self
.id, abovethis
)
raise_
= tkraise
# BW compat
def scale(self
, xorigin
, yorigin
, xscale
, yscale
):
self
.canvas
.scale(self
.id, xorigin
, yorigin
, xscale
, yscale
)
return self
.canvas
.type(self
.id)
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'arc', *args
, **kw
)
class Bitmap(CanvasItem
):
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'bitmap', *args
, **kw
)
class ImageItem(CanvasItem
):
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'image', *args
, **kw
)
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'line', *args
, **kw
)
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'oval', *args
, **kw
)
class Polygon(CanvasItem
):
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'polygon', *args
, **kw
)
class Rectangle(CanvasItem
):
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'rectangle', *args
, **kw
)
# XXX "Text" is taken by the Text widget...
class CanvasText(CanvasItem
):
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'text', *args
, **kw
)
class Window(CanvasItem
):
def __init__(self
, canvas
, *args
, **kw
):
CanvasItem
.__init
__(self
, canvas
, 'window', *args
, **kw
)
def __init__(self
, canvas
, tag
=None):
tag
= 'Group%d' % id(self
)
self
.canvas
.dtag(self
.tag
)
def _do(self
, cmd
, *args
):
return self
.canvas
._do
(cmd
, (self
.tag
,) + _flatten(args
))
def addtag_above(self
, tagOrId
):
self
._do
('addtag', 'above', tagOrId
)
self
._do
('addtag', 'all')
def addtag_below(self
, tagOrId
):
self
._do
('addtag', 'below', tagOrId
)
def addtag_closest(self
, x
, y
, halo
=None, start
=None):
self
._do
('addtag', 'closest', x
, y
, halo
, start
)
def addtag_enclosed(self
, x1
, y1
, x2
, y2
):
self
._do
('addtag', 'enclosed', x1
, y1
, x2
, y2
)
def addtag_overlapping(self
, x1
, y1
, x2
, y2
):
self
._do
('addtag', 'overlapping', x1
, y1
, x2
, y2
)
def addtag_withtag(self
, tagOrId
):
self
._do
('addtag', 'withtag', tagOrId
)
return self
.canvas
._getints
(self
._do
('bbox'))
def bind(self
, sequence
=None, command
=None, add
=None):
return self
.canvas
.tag_bind(self
.id, sequence
, command
, add
)
def unbind(self
, sequence
, funcid
=None):
self
.canvas
.tag_unbind(self
.id, sequence
, funcid
)
return self
._do
('coords', pts
)
def dchars(self
, first
, last
=None):
self
._do
('dchars', first
, last
)
def dtag(self
, tagToDelete
=None):
self
._do
('dtag', tagToDelete
)
return self
.canvas
.tk
.splitlist(self
._do
('gettags', self
.tag
))
def icursor(self
, index
):
return self
._do
('icursor', index
)
return self
.canvas
.tk
.getint(self
._do
('index', index
))
def insert(self
, beforeThis
, string
):
self
._do
('insert', beforeThis
, string
)
def config(self
, cnf
={}, **kw
):
return self
.canvas
.itemconfigure(self
.tag
, _cnfmerge((cnf
,kw
)))
def lower(self
, belowThis
=None):
self
._do
('lower', belowThis
)
def move(self
, xAmount
, yAmount
):
self
._do
('move', xAmount
, yAmount
)
def tkraise(self
, aboveThis
=None):
self
._do
('raise', aboveThis
)
def scale(self
, xOrigin
, yOrigin
, xScale
, yScale
):
self
._do
('scale', xOrigin
, yOrigin
, xScale
, yScale
)
def select_adjust(self
, index
):
self
.canvas
._do
('select', ('adjust', self
.tag
, index
))
def select_from(self
, index
):
self
.canvas
._do
('select', ('from', self
.tag
, index
))
def select_to(self
, index
):
self
.canvas
._do
('select', ('to', self
.tag
, index
))