469,306 Members | 1,599 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,306 developers. It's quick & easy.

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

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.

A pointer in the right direction would be appreciated.

Thanks

PhilC
Jul 18 '05 #1
2 5465
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
Jul 18 '05 #2
Thanks Eric,

I thought so too :)

Re looked at my script and I had an error further down. Corrected that
and the scrolling all works. Part of my inexperience is not knowing
where to look for the errors. I'm sure that comes with practice.

Many thanks for taking the time to answer me it is much appreciated.

Regards

Phil

On Mon, 25 Oct 2004 10:16:09 +0200, Eric Brunel
<er*********@despammed.com> wrote:
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


Jul 18 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Mickel Grönroos | last post: by
24 posts views Thread by Nobody | last post: by
17 posts views Thread by Dino M. Buljubasic | last post: by
1 post views Thread by dbuchanan | last post: by
1 post views Thread by Bob Greschke | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by harlem98 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.