如果我从控制台加载我的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)
答案 0 :(得分:1)
当没有在X11下运行时,PyGame将利用SDL进行视频(帧缓冲)和鼠标/触摸输入(输入事件)。使用触摸屏(与传统鼠标相对),SDL通常会报告未校准和(可能是?)未旋转的坐标,除非您使用TSLIB。
确保您拥有所需的所有零碎碎片:
apt-get install tslib libts-bin
现在告诉SDL在启动Python脚本之前设置一些环境变量来使用它:
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
,因此您无需在重新启动系统时重新校准。