Cursor Position.

5 views
Skip to first unread message

Samantha

unread,
Nov 9, 2005, 1:07:00 AM11/9/05
to
Looking at the goto(xy) thread.
Is there a way to get the X,Y position from a cursor click and then use the
position to apply something like a water mark on an image at that position?
Thanks,


Fredrik Lundh

unread,
Nov 9, 2005, 2:01:03 AM11/9/05
to pytho...@python.org
"Samantha" <samant...@hotmail.com> wrote:

All GUI toolkits can handle the "click here" part. Which one are you using ?

to apply water marks, use PIL:

http://www.pythonware.com/products/pil

</F>

Samantha

unread,
Nov 9, 2005, 2:19:45 AM11/9/05
to
I will be using Tkinter. All I need is a way to get the X,Y position from a
mouse click. I am trying to have an image loaded to click on, but that seems
to be a problem. So if I can just get the position from the screen of a
graphics program, showing an image, it will work for me.
S
"Fredrik Lundh" <fre...@pythonware.com> wrote in message
news:mailman.332.11315197...@python.org...
Message has been deleted

Juho Schultz

unread,
Nov 9, 2005, 3:21:34 AM11/9/05
to
Samantha wrote:
> I will be using Tkinter. All I need is a way to get the X,Y position from a
> mouse click. I am trying to have an image loaded to click on, but that seems
> to be a problem. So if I can just get the position from the screen of a
> graphics program, showing an image, it will work for me.
> S

If you use TkInter, use also these:
http://www.pythonware.com/library/tkinter/introduction/index.htm
http://infohost.nmt.edu/tcc/help/pubs/tkinter/

For mouse click position, this might be helpful:
http://www.pythonware.com/library/tkinter/introduction/events-and-bindings.htm

Diez B. Roggisch

unread,
Nov 9, 2005, 3:57:43 AM11/9/05
to
Samantha wrote:
> I will be using Tkinter. All I need is a way to get the X,Y position from a
> mouse click. I am trying to have an image loaded to click on, but that seems
> to be a problem. So if I can just get the position from the screen of a
> graphics program, showing an image, it will work for me.

Won't be easy - a toolkit (like tkinter) will only cpature your mous
events that are directed towards it's own windows. You might be able to
convince your program to collect mouse-events outside for a short period
of time - like snapshot programs do - but that will reqiure pretty
complicated, OS-dependant coding. Certainly way more complicated than
loading an image using tkinter. Better tell us what's giving you a hard
time there.

Diez

Samantha

unread,
Nov 9, 2005, 2:53:38 PM11/9/05
to
Diez,
> Won't be easy - a toolkit (like tkinter) will only capture your mouse
> events that are directed towards it's own windows.

That is my exact problem. I want to have the mouse event captured from
another application window. In this case an image window opened in Paint
Shop Pro that by the way uses Python to make scripts. I would like to be
able to click on the image and get the X,Y positions. I have been able to
get the X,Y from Tkinter own window as you say. Once I have those positions
I can use them in a Paint Shop Pro script.
Thanks for your reply. Do you have any advise as to how I can do what I am
trying or is it, in a practical matter, impossible.
S

"Diez B. Roggisch" <de...@nospam.web.de> wrote in message
news:3tds08F...@uni-berlin.de...

Diez B. Roggisch

unread,
Nov 9, 2005, 4:42:01 PM11/9/05
to
> That is my exact problem. I want to have the mouse event captured from
> another application window. In this case an image window opened in Paint
> Shop Pro that by the way uses Python to make scripts. I would like to be
> able to click on the image and get the X,Y positions. I have been able to
> get the X,Y from Tkinter own window as you say. Once I have those positions
> I can use them in a Paint Shop Pro script.
> Thanks for your reply. Do you have any advise as to how I can do what I am
> trying or is it, in a practical matter, impossible.

As I said - it certainly is doable. But I fear not in tkinter "as is"
(you can use tk still for your _own_ gui), and not without deeper
knowledge of the windows event system. Then mark hammond's win32
extensions are a starting point. And you should search for example code
on MSDN or something like that (obviously _not_ in python), to get a
starting point.

Regards,

Diez

snoe

unread,
Nov 16, 2005, 1:26:15 PM11/16/05
to
This script should be a good start:
from ctypes import *
import time

PUL = POINTER(c_ulong)
class KeyBdInput(Structure):
_fields_ = [("wVk", c_ushort),
("wScan", c_ushort),
("dwFlags", c_ulong),
("time", c_ulong),
("dwExtraInfo", PUL)]

class HardwareInput(Structure):
_fields_ = [("uMsg", c_ulong),
("wParamL", c_short),
("wParamH", c_ushort)]

class MouseInput(Structure):
_fields_ = [("dx", c_long),
("dy", c_long),
("mouseData", c_ulong),
("dwFlags", c_ulong),
("time",c_ulong),
("dwExtraInfo", PUL)]

class Input_I(Union):
_fields_ = [("ki", KeyBdInput),
("mi", MouseInput),
("hi", HardwareInput)]

class Input(Structure):
_fields_ = [("type", c_ulong),
("ii", Input_I)]

class POINT(Structure):
_fields_ = [("x", c_ulong),
("y", c_ulong)]

def Click(x,y):

orig = POINT()

windll.user32.GetCursorPos(byref(orig))

windll.user32.SetCursorPos(x,y)

FInputs = Input * 2
extra = c_ulong(0)

ii_ = Input_I()
ii_.mi = MouseInput( 0, 0, 0, 2, 0, pointer(extra) )

ii2_ = Input_I()
ii2_.mi = MouseInput( 0, 0, 0, 4, 0, pointer(extra) )

x = FInputs( ( 0, ii_ ), ( 0, ii2_ ) )

windll.user32.SendInput(2, pointer(x), sizeof(x[0]))

return orig.x, orig.y

Reply all
Reply to author
Forward
0 new messages