next up previous contents index 6264666870
Next: 7. Allgemeine Konfiguration von Up: 6. Tk_Intern: Canvas Previous: 6.5 Canvas und Scrollbars   Contents   Index

6.6 Canvas und Events

Über Events werden wir erst im Kapitel [*] detaillierter sprechen. Da das Problem, wie ein Item mit der Maus bewegt werden kann zu den interessantesten Fragen gehört, gebe ich hier eines der schönsten Beispiele aus dem Buch von Mark LUTZ, Programming Python, O'Reilly Verlag, das ich nur wärmstens als erweiterte Lektüre empfehlen kann:

#file: canvas5.py

#Beispiel von Mark Lutz aus dem Buch Programming Python, O' Reilly 
 
from Tkinter import * 
 
trace = 0 
 

class CanvasEventsDemo:  
 
  def __init__(self, parent=None):

    canvas = Canvas(width=300, height=300, bg='beige')

    canvas.pack()

    canvas.bind('<ButtonPress-1>', self.onStart) # click

    canvas.bind('<B1-Motion>', self.onGrow) # and drag

    canvas.bind('<Double-1>', self.onClear) # delete all

    canvas.bind('<ButtonPress-3>', self.onMove) # move latest

    self.canvas = canvas

    self.drawn = None

    self.kinds = [canvas.create_oval, canvas.create_rectangle]  
 
  def onStart(self, event):

    self.shape = self.kinds[0]

    self.kinds = self.kinds[1:] + self.kinds[:1] # start dragout

    self.start = event

    self.drawn = None  
 
  def onGrow(self, event): # delete and redraw

    canvas = event.widget

    if self.drawn: canvas.delete(self.drawn)

    objectId = self.shape(self.start.x, self.start.y, event.x, event.y)

    if trace: print objectId

    self.drawn = objectId  
 
  def onClear(self, event):

    event.widget.delete('all') # use tag all  
 
  def onMove(self, event):

    if self.drawn: # move to click spot

    if trace: print self.drawn

    canvas = event.widget

    diffX, diffY = (event.x - self.start.x), (event.y - self.start.y)

    canvas.move(self.drawn, diffX, diffY)

    self.start = event  
 
CanvasEventsDemo()

mainloop() 

Dieses Beispiel kann Ellipsen und Rechtecke zeichnen und zwar wie folgt:


next up previous contents index 6264666870
Next: 7. Allgemeine Konfiguration von Up: 6. Tk_Intern: Canvas Previous: 6.5 Canvas und Scrollbars   Contents   Index
Heiko Schroeder 2003-03-23