除非我在xwindows中,否则Pygame.MOUSEBUTTONDOWN坐标都会关闭

时间:2014-09-29 04:13:11

标签: python pygame

如果我从控制台加载我的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)

1 个答案:

答案 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,因此您无需在重新启动系统时重新校准。