Mouse coordinates on Python with PySimpleGUI

Question:

I’m trying to get the mouse coordinates, with pynput, and see it with a GUI with PySimpleGUI but I am getting a lot of problens, and I don’t know how can I do this.

I want to show the mouse coordinates at the "x – y" string below

import PySimpleGUI as sg
from pynput import mouse

sg.theme("DarkAmber")

layout = [[sg.Text("Mouse Coord")],
          [sg.Text("x - y")]]

window = sg.Window("Mouse Coord 1.0", layout, keep_on_top = True)

while True:
    event, values = window.read()
    print(event, values)

    if event == sg.WIN_CLOSED or event == 'Exit':
        break

window.close()
Asked By: Gabriel Garcia

||

Answers:

Not sure why you need the mouse coordinate, following code demo the way to get it by PySimpleGUI.

import PySimpleGUI as sg

sg.theme("DarkAmber")

layout = [[sg.Text("Mouse Coord:"), sg.Text(size=20, key='Coordinate')]]
window = sg.Window("Mouse Coord", layout, finalize=True)
window.bind('<Motion>', 'Motion')

while True:

    event, values = window.read()

    if event == sg.WIN_CLOSED:
        break
    elif event == 'Motion':
        e = window.user_bind_event
        window['Coordinate'].update(f'({e.x}, {e.y})')

window.close()

enter image description here

You can get the screen coordinate by e.x_root and e.y_root, like

        window['Coordinate'].update(f'({e.x_root}, {e.y_root})')

The '<Motion>' in tkinter only work when mouse on the tkinter window, following code demo the way using pynput library to capture the motion event, then pass it to PySimpleGUI.

from pynput.mouse import Listener
import PySimpleGUI as sg


def on_move(x, y):
    window.write_event_value('Motion', (x, y))

sg.theme("DarkAmber")

layout = [[sg.Text("Mouse Coord:"), sg.Text(size=20, key='Coordinate')]]
window = sg.Window("Mouse Coord", layout, finalize=True, enable_close_attempted_event=True)

listener = Listener(on_move=on_move)
listener.start()

while True:

    event, values = window.read()

    if event == sg.WINDOW_CLOSE_ATTEMPTED_EVENT:
        listener.stop()
        break
    elif event == 'Motion':
        x, y = values[event]
        window['Coordinate'].update(f'({x}, {y})')

window.close()
Answered By: Jason Yang

It are giving the window coordinates but I need the window coordinates

import PySimpleGUI as sg
import pyautogui

position = pyautogui.position()

sg.theme("DarkAmber")

layout = [[sg.Text("Mouse Coord:"), sg.Text(size = 20, key = "Coordinate")]]
window = sg.Window("Mouse Coord", layout, finalize = True, keep_on_top = True)

window.bind("<Motion>", "Motion")

while True:

    event, values = window.read()

    if event == sg.WIN_CLOSED:
        break
    elif event == "Motion":
        e = window.user_bind_event
        window["Coordinate"].update(f"({e.x}, {e.y})")

window.close()

It return the window mouse coordinate

Answered By: Gabriel Garcia
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.