如何用PySimpleGUI结合pynput获取并显示鼠标坐标?
实现PySimpleGUI实时显示鼠标坐标(基于pynput)
要实现实时显示鼠标坐标,需要解决三个核心问题:给可更新的文本元素标记唯一标识、用pynput监听鼠标移动、线程安全地更新GUI内容。以下是修改后的完整代码:
import PySimpleGUI as sg from pynput import mouse sg.theme("DarkAmber") # 给显示坐标的文本框加key,方便后续动态更新内容 layout = [[sg.Text("Mouse Coord")], [sg.Text("x - y", key='-COORD-')]] window = sg.Window("Mouse Coord 1.0", layout, keep_on_top=True) # 鼠标移动时触发的回调函数,把坐标通过自定义事件传给主GUI线程 def on_move(x, y): window.write_event_value('MOUSE_COORD', (x, y)) # 启动鼠标监听器,设为守护线程——关闭GUI时自动停止监听 listener = mouse.Listener(on_move=on_move) listener.daemon = True listener.start() while True: event, values = window.read() # 处理自定义的坐标更新事件 if event == 'MOUSE_COORD': x, y = values['MOUSE_COORD'] window['-COORD-'].update(f"{x} - {y}") # 关闭窗口时退出循环 if event == sg.WIN_CLOSED or event == 'Exit': break window.close()
关键修改说明
- 给Text元素加key:没有key的元素无法被动态定位修改,
key='-COORD-'是后续更新文本的唯一标识 - 线程安全更新GUI:pynput的监听器运行在独立线程,不能直接在回调里修改GUI元素,
window.write_event_value会把事件和坐标放进主GUI的事件队列,由主循环处理,避免崩溃 - 守护线程设置:
listener.daemon = True确保关闭主窗口时,监听器线程自动终止,不会残留后台进程
内容的提问来源于stack exchange,提问作者Gabriel Garcia
相关产品推荐
相关产品推荐

