Matheus Soares da Silva wrote: > Hello, I would like to be able to get information from a Tkinter canvas > object. (color, width, tags, root points, etc), > > I wrote the following function that, with a canvas bind, returns me the > widget that has been clicked on, the widget is returned as a tuple by the > find_overlapping method. > > # detecting click > def Hasclicked(e): > global obj > global lastClick > lastClick = [e.x, e.y] > obj = e.widget.find_overlapping(e.x, e.y, e.x, e.y) > > So, there's any method I can use on 'obj' to get the attributes?
obj is a tuple of ids. You can use canvas.itemcget(id, attribute) to explore the properties of the underlying objects To get (for example) their fill-color: for id in e.widget.find_overlapping(e.x, e.y, e.x, e.y): print canvas.itemcget(id, "fill") A complete example: from __future__ import division import Tkinter as tk from math import cos, sin, pi WIDTH = 640 HEIGHT = 480 root = tk.Tk() canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT) canvas.pack() var = tk.StringVar() label = tk.Label(root, textvariable=var) label.pack() def canvas_click(event): x, y = event.x, event.y ids = canvas.find_overlapping(x, y, x, y) clicked_colors = ", ".join(canvas.itemcget(id, "fill") for id in ids) var.set(clicked_colors) RADIUS = 100 R = 80 CX = WIDTH // 2 CY = HEIGHT // 2 phi = pi/2 # 90 degree for color in "red", "green", "blue": x = int(CX + R*cos(phi)) y = int(CY - R*sin(phi)) phi += pi*2/3 # 120 degree canvas.create_oval(x-RADIUS, y-RADIUS, x+RADIUS, y+RADIUS, fill=color) canvas.bind("<Button-1>", canvas_click) root.mainloop() _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor