Canvas.py 7.3 KB

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