How do I get the same (x,y) coordinate for a given relative location in the Ruby/tk application regardless of which widget I'm clicking on? Background: This has to do with a sudoku program I'm writing wherein I use the (x,y) coordinates from mouse clicks to determine which sudoku cell I am in. The cells are TkcRectangles and the numbers in (actually 'on') them are TkLabels. Note that both the TkcRectangles and the TkLabels have the same TkCanvas as their parent widget. When I click in a cell (TkcRectangle) with no number (TkLabel) displayed within it, I get an (x,y) coordinate relative to the canvas (TkCanvas), but when I click in the same rectangle after I display a number within it (placed over the TkcRectangle as a TkLabel) - and I click on that number, then the (x,y) coordinate reported back to me is relative to the TkLabel's origin, not the TkCanvas'. This breaks my cell lookup scheme! Again, since both the rectangles and labels have the canvas a parent, I don't see why the (x,y) coordinates shouldn't be relative to the canvas in both cases. That is what I want anyway. Is there a way to make this this happen? Does Ruby/Tk implement Tk's Virtual Desktop Coordinates (vrootx and vrooty) that give coordinates relative to the virtual desktop? Or does Ruby/Tk implement accessing the rootx and rooty coordinates which would be the same regardless of which widget is under the mouse click? Or can I use a 'lower' method on the the TkLabel widget to put it below the TkcRectangles (without, of course, covering it up)? Alas, and alack, I've browsed around the docs quite a bit. I also tried a bunch of stuff, but I just keep breaking the code that I had running fine! I'm stuck!!! The relevant code is straightforward. I”Ēve got a root and a canvas: @root = TkRoot.new(:title=>"David's Sudoku Treasury", :geometry=>"650x650") @canvas = TkCanvas.new(@root, :width=> @canvasWidth, :height=> @canvasHeight) A callback proc bind'ed to the mouse button: @root.bind('Button', proc{|b,x,y| mainCellClickedProc(b, x, y)}, \ "%b %x %y") A method that is called inside of the bind callback proc to report the button clicked and the (x,y) coordinate of the clicked location: def tell_it(btn, x, y) puts "tell_it: Mouse button #{btn} clicked at coordinates (#{x},#{y})" end A set of 81 rectangles: def createAndDrawCells() # Sizing and Location Variables @cellSize = 40 if @cellSize == 0 # Cell size @xr1c1 = 10 if @xr1c1 == 0 # Cell R1C1 X Upper Left Position @yr1c1 = 10 if @yr1c1 == 0 # Cell R1C1 Y Upper Left Position @color = @bgColor # Cell Rows 9.times do |i| xul = @xr1c1 yul = @yr1c1 + (i * @cellSize) xlr = xul + @cellSize ylr = yul + @cellSize # Cell Columns 9.times do |j| @boardRects [ (i * 9) + j ] = TkcRectangle.new(@canvas, xul, yul, xlr, ylr, \ :fill=>@color) xul = xul + @cellSize xlr = xlr + @cellSize end end end A set of 81 labels: def createEntryNumberLabels() 81.times do |i| @entryNumberLabels[i] = TkLabel.new(@canvas) end end -- Posted via http://www.ruby-forum.com/.