You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:11:20