Windows10+Python3.11下Xlib.Display()报socket.AF_UNIX不存在的AttributeError求助
问题根源
你用的Xlib库是针对Linux/Unix系统的X Window窗口环境开发的,Windows 10使用的是原生窗口系统,不支持Xlib依赖的AF_UNIX套接字,所以无论怎么调用Display()都会报错。
解决方法:使用Windows原生支持的库替代
以下两种方案都能在Windows 10+Python3.11环境下实现鼠标锁定/限制功能:
方案1:使用pywin32(基于Windows API)
先安装依赖:
pip install pywin32
示例代码(锁定鼠标到当前屏幕区域,5秒后释放):
import win32api import win32gui import time # 获取当前主屏幕的区域范围 screen_width = win32api.GetSystemMetrics(0) screen_height = win32api.GetSystemMetrics(1) lock_rect = (0, 0, screen_width, screen_height) # 锁定鼠标到指定区域 win32gui.ClipCursor(lock_rect) # 保持锁定5秒 time.sleep(5) # 释放鼠标锁定 win32gui.ClipCursor(None)
方案2:使用pynput(简洁的跨平台封装)
先安装依赖:
pip install pynput
示例代码(限制鼠标移动范围,5秒后解除):
from pynput.mouse import Controller import time mouse = Controller() # 获取屏幕尺寸,定义锁定范围为整个屏幕 screen_size = mouse.screen.width, mouse.screen.height lock_area = (0, 0, screen_size[0], screen_size[1]) # 将鼠标移到屏幕中心,开启移动限制 mouse.position = (screen_size[0]//2, screen_size[1]//2) mouse._listener._suppress = True try: time.sleep(5) finally: # 解除鼠标移动限制 mouse._listener._suppress = False
额外说明
你原代码中的@contextlib.contextmanager用法存在语法错误——这个装饰器需要装饰函数而非直接应用在root.grab_pointer调用上,但核心问题还是平台不兼容,替换库才是根本解决办法。
内容的提问来源于stack exchange,提问作者korsir
相关产品推荐
相关产品推荐

