gpt4 book ai didi

python - Pygame.MOUSEBUTTONDOWN 坐标关闭,除非我在 xwindows 中

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:26 25 4
gpt4 key购买 nike

如果我从控制台加载 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,因此您在重新启动系统时无需重新校准。

关于python - Pygame.MOUSEBUTTONDOWN 坐标关闭,除非我在 xwindows 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26092441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com