PyGame и сенсорный экран

Я создал графический интерфейс pygame с кнопками, которые активируются, когда пользователь нажимает на них. Графический интерфейс работает хорошо, когда я использую свою настоящую мышь, но когда я запускаю графический интерфейс на PITFT (https://www.adafruit.com/product/1601), кнопки не реагируют на нажатия (даже если я использую более твердый материал, чем мой палец, например, стилус).

Итак, вопрос: совместимо ли событие щелчка Pygame с PITFT или для него создано какое-то «специальное» событие?

Вот текущее событие мыши, которое я использую в своем коде:

def run(self):
  """Lance la boucle principale pour gérer les événements
  """
  while True:
     event = pygame.event.wait()

     if event.type == MOUSEBUTTONDOWN and event.button == 1 and not self.keep_level_2:
        self.click(event.pos)

     elif event.type == MOUSEBUTTONUP and event.button == 1:
        self.release(event.pos)`

Я искал в Интернете и обнаружил, что для использования PiTft вам нужно добавить следующие строки:

os.environ['SDL_VIDEODRIVER'] = 'fbcon'
os.environ["SDL_FBDEV"] = "/dev/fb1"
os.environ["SDL_MOUSEDEV"] = "/dev/input/touchscreen"
os.environ["SDL_MOUSEDRV"] = "TSLIB"

Поэтому я попытался добавить их, но сенсорный экран все еще не отвечает.

Кроме того, при запуске программы я не могу выйти из нее (CTRL C и escape не работают).

Примечание. Мой код не работает в Python 3.


person Theo Champion    schedule 21.07.2014    source источник
comment
Из того, что вы опубликовали, вам нужно установить устройство мыши и драйвер мыши для pygame, чтобы правильно захватить мышь. Куда вы добавили эти строки?   -  person Bartlomiej Lewandowski    schedule 22.07.2014
comment
Я также попытался снизить разрешение моего окна pygame, чтобы оно не отображалось в полноэкранном режиме (поэтому я могу попытаться выйти, нажав кнопку выхода в окне), но это тоже не работает... На самом деле, pygame окно остается в полноэкранном режиме:/   -  person Theo Champion    schedule 22.07.2014
comment
И как я могу добавить эти драйверы? :) У меня были эти строки в начале (сразу после строк импорта)   -  person Theo Champion    schedule 22.07.2014
comment
У меня есть этот экран, работающий с pygame, и я установил те же строки os.environ, что и вы. Мне не сразу понятно, в чем дело. Я не проверял на event.button. Взгляните на мой код здесь: github.com/elParaguayo/ RPI-Info-Screen/blob/PiTFT/default.py   -  person elParaguayo    schedule 22.07.2014
comment
@elParaguayo Использовали ли вы собственное ядро ​​Raspbian, готовое к записи образа, или вы следовали руководству, чтобы установить его на свой текущий Raspian? Может быть, у них другое имя водителя.   -  person Theo Champion    schedule 22.07.2014
comment
Я следовал руководству на сайте Adafruit. Вы следовали инструкциям по калибровке сенсорного экрана? Они работали на вас?   -  person elParaguayo    schedule 23.07.2014
comment
Я просто устанавливаю готовый образ raspian (здесь learn.adafruit.com/ ), и сенсорный экран отлично работает, когда мои окна pygame не запущены.   -  person Theo Champion    schedule 23.07.2014
comment
Я только что проверил свой сенсорный экран с помощью evtest, и, похоже, он работает правильно, поэтому я действительно не знаю, откуда взялась проблема: /   -  person Theo Champion    schedule 29.07.2014


Ответы (2)


Я думаю, что происходит то, что вы делаете кнопку вверх, кнопку вниз метод.

Я заставляю свой графический интерфейс pygame работать, перейдя...

click = pygame.mouse.get_pressed()

if x+w > mouse_pos[0] > x and y+h > mouse_pos[1] > y:
    pygame.draw.rect(screen, ac,(x,y,w,h))
    if click[0] == 1 and action != None:
            action()

ОДНАКО для меня это создает другие проблемы, потому что я не думаю, что 1 нажатие на сенсорный экран - это ГЛАДКИЙ одиночный щелчок. Что происходит для меня, так это то, что моя кнопка щелкнет, затем она без видимой причины сделает второй «щелчок» (я думаю, из-за «нечеткости» в щелчке).

В результате у меня кнопки включения то включаются (работают отлично), то выключаются. Пока не совсем уверен, что с этим делать, но, надеюсь, ваш проект заработает.

person John    schedule 17.01.2015

Вы проверили, что ваш /dev/input/touchscreen «связан» с нужным модулем? Проверьте evtest /dev/input/touchscreen и проверьте, работает ли он при использовании экрана, клавиатуры или мыши!

Если это происходит, вам следует повторить процедуру установки еще раз.

person Claudiu    schedule 17.03.2017