全屏时奇怪的pygame坐标

时间:2017-10-25 00:43:26

标签: python-2.7 pygame coordinates fullscreen

我在带有触摸屏显示器的覆盆子pi上使用pygame编写了一个应用程序。它在窗口模式下完全正常工作,但一旦切换到全屏模式,它就会完全变得奇怪。我的所有触摸(点击)都不会返回合理的x和y,并且通过几次单击后它们通常会返回为799和479(屏幕的右下角)。我该怎么做才能解决问题?

我的屏幕的全屏分辨率是800x480,我不得不提到我在桌面计算机上工作时没有这个问题,而且只有在使用触摸屏输入时才会出现这种情况。以下是代码的相关部分:

screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)

这可以正常使用,但当我切换到全屏时:

MPI_Open_port

它将检测屏幕结束像素中的每次点击。奇怪的是,当我在主屏幕上放置对象(例如按钮)时,它们被正确放置在正确的坐标处,但我无法点击它们,因为触摸屏输入的返回坐标不正确。

2 个答案:

答案 0 :(得分:1)

多么有趣的问题!我刚刚在我的Windows笔记本电脑上使用我的触摸屏测试了一些代码(一次!),它也遇到了一些奇怪的问题,所以你并不孤单!至少在我看来每当我使用pygame.mouse.set_visible(False)pygame.FULLSCREEN标志组合隐藏鼠标光标时,我的pygame.MOUSEBUTTONDOWN会出现问题返回错误鼠标位置的事件。使光标可见会修复此问题,但显然对触摸屏很烦人。我想出的解决方案(实际上是一个黑客)是使用无边界窗口来模拟全屏模式,而不是位于屏幕的左上角。这是代码;让我知道它是否适合你:

import pygame, time, math, sys, os

os.environ['SDL_VIDEO_WINDOW_POS'] = "{0},{1}".format(0, 0)
pygame.init()        
screen = pygame.display.set_mode((0, 0), pygame.NOFRAME)
pygame.mouse.set_visible(False)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            print(event.pos)
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                pygame.quit()
                sys.exit()

话虽如此,我很想知道为什么它不适用于pygame.FULLSCREEN标志。如果有人可以为pygame或SDL1.2提供一些见解,那将非常感激......

答案 1 :(得分:0)

我在https://github.com/garthvh/pitftmenu

上找到了它

在Debian Jessie上修复Pygame

Debian Jessie附带的软件包"libsdl1.2-15-10"破坏了pygame。为了使其正常工作,我们必须从Wheezy恢复到"libsdl1.2-15-5"

最快的方法是将/etc/apt/sources.list中的所有内容注释掉并暂时添加:

deb http://archive.raspbian.org/raspbian wheezy main contrib non-free

导入相应的键:

deb http://archive.raspbian.org/raspbian wheezy main contrib non-free
gpg -a --export 9165938D90FDDD2E | sudo apt-key add -

删除有问题的软件包,并用有效的软件包替换:

sudo apt-get update

sudo apt-get remove libsdl1.2debian python-pygame

apt-get install libsdl-image1.2 libsdl-mixer1.2 libsdl-ttf2.0-0 libsdl1.2debian libsmpeg0 python-pygame

sudo apt-mark hold libsdl1.2debian

"/etc/apt/sources.list"恢复到原始状态。

就是这样。 pygame是固定的:-)