Canvas with scrollbars - how to get correct canvas coordinate when the scroll bars have moved?

Eric Brunel eric_brunel at despammed.com
Mon Oct 25 04:16:09 EDT 2004


PhilC wrote:
> Hi Folks,
> 
> I'm trying to click on a canvas to draw a line. The canvas has scroll
> bars. All is well until I move the scrollbars. This naturally because
> the relationship between my screen click and canvas event.x, event.y
> has changed.
> 
> I need something that will add the proportional amount the scroll bar
> has moved to the mouse click position. I see the terms canvasx and
> canvasy but they appear to be used for converting screen position to
> canvas position.

Either I do not understand your question, or canvasx and canvasy are exactly 
what you're looking for:

------------------------------------------------------------
from Tkinter import *

root = Tk()
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
cnv = Canvas(root, scrollregion=(0, 0, 1000, 1000))
cnv.grid(row=0, column=0, sticky='nswe')
hs = Scrollbar(root, orient=HORIZONTAL, command=cnv.xview)
hs.grid(row=1, column=0, sticky='we')
vs = Scrollbar(root, orient=VERTICAL, command=cnv.yview)
vs.grid(row=0, column=1, sticky='ns')
cnv.configure(xscrollcommand=hs.set, yscrollcommand=vs.set)

def click(evt):
   x, y = cnv.canvasx(evt.x), cnv.canvasy(evt.y)
   cnv.create_oval(x - 5, y - 5, x + 5, y + 5)

cnv.bind('<1>', click)

root.mainloop()
------------------------------------------------------------

"Canvas position" is the position in the drawable zone for the canvas, 
considering the scroll-region. Isn't it what you want?

HTH
-- 
- Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com



More information about the Python-list mailing list