Ketan Maheshwari wrote: > Hi All > I have this code from the web that I modified according to y > requirements. It has a class called Circle. Then there are a few objects > of this class created using a constructor. The constructor essentially > creates the circles and the update mathod makes them move randomly. > However, at each updation, I want to access each circle to know its > coordinates. At the moment I am not able to do that. I am sure it should > be easy to do. Could anyone help me please.
The line xy = self.canvas.coords(self.id) reads the bounding box of the circle. The returned value is a list containing the coordinates of the bounding box of the circle (x0, y0, x1, y1) - in other words the coordinates of the left, top, right and bottom of the circle. This might help a bit: http://infohost.nmt.edu/tcc/help/pubs/tkinter/canvas-concepts.html Kent > > Thanks, > k. > > Code follows: > ******************code starts here*************************** > from Tkinter import * > import time > import random > class Circle: > def __init__(self, canvas, xy, ink, delta): > self.canvas = canvas > self.id = self.canvas.create_oval( > -15, -15, > 15, 15, > fill=ink > ) > > self.canvas.move(self.id, xy[0], xy[1]) > self.delta = delta > self.start = self.move > > def __call__(self): > return self.start # get things going > def move(self): > rand=random.randint(1,4) > > if rand==1: > xy = self.canvas.coords(self.id) > #print xy > if xy[2] >= self.canvas.winfo_width(): > self.canvas.move(self.id,-self.delta,0) > self.canvas.move(self.id,self.delta,0) > elif rand==2: > xy = self.canvas.coords(self.id) > if xy[0] <= 0: > self.canvas.move(self.id,self.delta,0) > self.canvas.move(self.id,-self.delta,0) > elif rand==3: > xy = self.canvas.coords(self.id) > if xy[1] <= 0: > self.canvas.move(self.id,0,self.delta) > self.canvas.move(self.id,0,-self.delta) > else: > xy = self.canvas.coords(self.id) > if xy[3] >= self.canvas.winfo_height(): > self.canvas.move(self.id,0,-self.delta) > self.canvas.move(self.id,0,self.delta) > return self.move > > > > root = Tk() > root.title("Circles") > root.resizable(0, 0) > > frame = Frame(root, bd=5, relief=SUNKEN) > frame.pack() > > canvas = Canvas(frame, width=200, height=200, bd=0, highlightthickness=0) > canvas.pack() > > items = [ > Circle(canvas, (60, 70), "blue", 1), > Circle(canvas, (100, 120), "green", 1), > ] > > root.update() # fix geometry > > # loop over items > > try: > while 1: > for i in range(len(items)): > items[i] = items[i]() > root.update_idletasks() # redraw > root.update() # process events > time.sleep(0.02) > except TclError: > pass # to avoid errors when the window is closed > > *************************************code ends > here****************************** > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor