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

Discussion in 'Python' started by PhilC, Oct 23, 2004.

  1. PhilC

    PhilC Guest

    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.


    PhilC, Oct 23, 2004
    1. Advertisements

  2. PhilC

    Eric Brunel Guest

    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)


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

    Eric Brunel, Oct 25, 2004
    1. Advertisements

  3. PhilC

    PhilC Guest

    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.


    PhilC, Oct 25, 2004
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.