blob: 2af14591add54d5f910982d28c2163cc82dea3b2 [file] [log] [blame]
Guido van Rossum18468821994-06-20 07:49:28 +00001# This module exports classes for the various canvas item types
2
Guido van Rossum18468821994-06-20 07:49:28 +00003from Tkinter import Canvas, _isfunctype
4
5class CanvasItem:
6 def __init__(self, canvas, itemType, args = (), cnf={}):
7 self.canvas = canvas
8 self.id = canvas._create(itemType, args + (cnf,))
9 def __str__(self):
10 return str(self.id)
11 def __repr__(self):
12 return '<%s, id=%d>' % (self.__class__.__name__, self.id)
13 def __del__(self):
14 self.canvas.delete(self.id)
15 delete = __del__
16 def __getitem__(self, key):
Guido van Rossumfea128e1994-06-20 13:42:28 +000017 v = self.canvas.tk.split(self.canvas.tk.call(
18 self.canvas._w, 'itemconfigure',
19 str(self.id), '-' + key))
Guido van Rossum18468821994-06-20 07:49:28 +000020 return v[4]
21 def __setitem__(self, key, value):
22 self.canvas._itemconfig(self.id, {key: value})
23 def keys(self):
24 if not hasattr(self, '_keys'):
25 self._keys = map(lambda x, tk=self.canvas.tk:
Guido van Rossumfea128e1994-06-20 13:42:28 +000026 tk.splitlist(x)[0][1:],
27 self.canvas._splitlist(
28 self.canvas.cmd(
29 'itemconfigure',
30 self.id)))
Guido van Rossum18468821994-06-20 07:49:28 +000031 return self._keys
32 def has_key(self, key):
33 return key in self.keys()
34 def addtag(self, tag, option='withtag'):
35 self.canvas.addtag(tag, option, self.id)
36 def bbox(self):
37 x1, y1, x2, y2 = self.canvas.bbox(self.id)
38 return (x1, y1), (x2, y2)
39 def bind(self, sequence=None, command=None):
40 return self.canvas.bind(self.id, sequence, command)
41 def coords(self, pts = ()):
42 flat = ()
43 for x, y in pts: flat = flat + (x, y)
44 return apply(self.canvas.coords, (self.id,) + flat)
45 def dchars(self, first, last=None):
46 self.canvas.dchars(self.id, first, last)
47 def dtag(self, ttd):
48 self.canvas.dtag(self.id, ttd)
49 def focus(self):
50 self.canvas.focus(self.id)
51 def gettags(self):
52 return self.canvas.gettags(self.id)
53 def icursor(self):
54 self.canvas.icursor(self.id)
55 def index(self):
56 return self.canvas.index(self.id)
57 def insert(self, beforethis, string):
58 self.canvas.insert(self.id, beforethis, string)
59 def lower(self, belowthis=None):
60 self.canvas.lower(self.id, belowthis)
61 def move(self, xamount, yamount):
62 self.canvas.move(self.id, xamount, yamount)
63 def raise_(self, abovethis=None):
64 self.canvas.raise_(self.id, abovethis)
65 def scale(self, xorigin, yorigin, xscale, yscale):
66 self.canvas.scale(self.id, xorigin, yorigin, xscale, yscale)
67 def type(self):
68 return self.canvas.type(self.id)
69
70class Arc(CanvasItem):
71 def __init__(self, canvas, (x1, y1), (x2, y2), cnf={}):
72 CanvasItem.__init__(self, canvas, 'arc',
Guido van Rossumfea128e1994-06-20 13:42:28 +000073 (str(x1), str(y1), str(x2), str(y2)), cnf)
Guido van Rossum18468821994-06-20 07:49:28 +000074
75class Bitmap(CanvasItem):
76 def __init__(self, canvas, (x1, y1), cnf={}):
Guido van Rossumfea128e1994-06-20 13:42:28 +000077 CanvasItem.__init__(self, canvas, 'bitmap',
78 (str(x1), str(y1)), cnf)
Guido van Rossum18468821994-06-20 07:49:28 +000079
80class Line(CanvasItem):
81 def __init__(self, canvas, pts, cnf={}):
82 pts = reduce(lambda a, b: a+b,
Guido van Rossumfea128e1994-06-20 13:42:28 +000083 map(lambda pt: (str(pt[0]), str(pt[1])), pts))
Guido van Rossum18468821994-06-20 07:49:28 +000084 CanvasItem.__init__(self, canvas, 'line', pts, cnf)
85
86class Oval(CanvasItem):
87 def __init__(self, canvas, (x1, y1), (x2, y2), cnf={}):
88 CanvasItem.__init__(self, canvas, 'oval',
Guido van Rossumfea128e1994-06-20 13:42:28 +000089 (str(x1), str(y1), str(x2), str(y2)), cnf)
Guido van Rossum18468821994-06-20 07:49:28 +000090
91class Polygon(CanvasItem):
92 def __init__(self, canvas, pts, cnf={}):
93 pts = reduce(lambda a, b: a+b,
Guido van Rossumfea128e1994-06-20 13:42:28 +000094 map(lambda pt: (str(pt[0]), str(pt[1])), pts))
Guido van Rossum18468821994-06-20 07:49:28 +000095 CanvasItem.__init__(self, canvas, 'polygon', pts, cnf)
96
97class Curve(Polygon):
98 def __init__(self, canvas, pts, cnf={}):
99 cnf['smooth'] = 'yes'
100 Polygon.__init__(self, canvas, pts, cnf)
101
102class Rectangle(CanvasItem):
103 def __init__(self, canvas, (x1, y1), (x2, y2), cnf={}):
104 CanvasItem.__init__(self, canvas, 'rectangle',
Guido van Rossumfea128e1994-06-20 13:42:28 +0000105 (str(x1), str(y1), str(x2), str(y2)), cnf)
Guido van Rossum18468821994-06-20 07:49:28 +0000106
107# XXX Can't use name "Text" since that is already taken by the Text widget...
108class String(CanvasItem):
109 def __init__(self, canvas, (x1, y1), cnf={}):
Guido van Rossumfea128e1994-06-20 13:42:28 +0000110 CanvasItem.__init__(self, canvas, 'text',
111 (str(x1), str(y1)), cnf)
Guido van Rossum18468821994-06-20 07:49:28 +0000112
113class Window(CanvasItem):
114 def __init__(self, canvas, where, cnf={}):
115 CanvasItem.__init__(self, canvas, 'window',
Guido van Rossumfea128e1994-06-20 13:42:28 +0000116 (str(where[0]), str(where[1])), cnf)