如果我从控制台加载 pygame 代码,它会错误地读取触摸屏坐标,但如果我启动到 xwindows,它会正确读取它们。
我已经进入并校准了触摸屏,如果我从控制台运行 evtest,我将得到正确的坐标。只有在 python 中,它才会返回错误的触摸坐标。
我是否缺少一些东西来告诉 python 如何校准?
import sys, pygame
pygame.init()
black = 0, 0, 0
size = width, height = 1280, 800
screen = pygame.display.set_mode(size)
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
print(pygame.mouse.get_pos())
screen.fill(black)
当不在 X11 下运行时,PyGame 将利用 SDL 来处理视频(帧缓冲区)和鼠标/触摸输入(输入事件)。使用触摸屏(而不是传统鼠标),SDL 通常会报告未校准和(可能?)未旋转的坐标,除非您使用 TSLIB。
确保您拥有所有需要的零件:
apt-get install tslib libts-bin
现在,在启动 Python 脚本之前,通过设置一些环境变量来告诉 SDL 使用它:
export SDL_FBDEV=/dev/fb1
export SDL_MOUSEDRV=TSLIB
export SDL_MOUSEDEV=/dev/input/touchscreen
./my_cool_program.py
或者您可以在 Python 脚本中“本地”执行此操作 - 这不会影响 Python 进程之外的环境变量:
import os
os.environ["SDL_FBDEV"] = "/dev/fb1"
os.environ["SDL_MOUSEDRV"] = "TSLIB"
os.environ["SDL_MOUSEDEV"] = "/dev/input/touchscreen"
这应该可以解决几乎所有问题,包括[触摸]屏幕方向。您应该注意检查系统的 fbdev 和输入设备路径的正确性。
如果您想提高触摸屏精度,可以校准它:
TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_calibrate
...你也可以测试它:
TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_test
校准数据保存至/etc/pointercal
因此,当您重新启动系统时,无需重新校准。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)