Pygame: разрешить кликам пройти через окно

Я делаю псевдопрозрачное окно в pygame с целью отображения разнообразной информации, такой как «HUD»,

Сценарий использует PIL для захвата изображения рабочего стола и использования его в качестве фона окна.

Простая версия:

import pygame as py from ctypes import windll import ImageGrab, Image SetWindowPos = windll.user32.SetWindowPos py.init() def get_image(): im = ImageGrab.grab((0,0,window_x,window_y)) mode = im.mode size = im.size data = im.tobytes() im = py.image.fromstring(data,size,mode) return im window_x = 1920 window_y = 100 background = py.Surface((window_x,window_y)) background.blit(get_image(),(0,0)) window_pos = (0,0) screen = py.display.set_mode((window_x,window_y),py.HWSURFACE|py.NOFRAME) SetWindowPos(py.display.get_wm_info()['window'],-1,0,0,0,0,0x0001) clock = py.time.Clock() done = False while not done: for event in py.event.get(): if event.type == py.QUIT: done = True screen.blit(background,(0,0)) py.display.flip() clock.tick(30) py.quit() 

Это создает окно Pygame в верхней части экрана.

Моя проблема в том, что окно Pygame блокирует любое взаимодействие с чем-либо под ним.

Есть ли способ, чтобы события мыши игнорировались и проходили через окно, например, нажимая на значок рабочего стола под окном Pygame.

One Solution collect form web for “Pygame: разрешить кликам пройти через окно”

Вам нужно сделать немного дополнительного взлома, который находится вне того, что дает PyGame. Должно быть возможно превратить холст PyGame в другую инфраструктуру окон в Python и попытаться использовать расширенные функции этой библиотеки для достижения этого.

В Windows

Одним из примеров является wxWidgets. Как описано в этой теме , которая звучит очень похоже на то, что вы пытаетесь достичь, пользователь установил окно, которое можно щелкнуть и прозрачно.

Также см. Эту статью Stackoverflow Post, в которой упоминается, как обрабатывать Хит-тестирование в C #. Проводка кода с этой должности здесь:

 protected override void WndProc(ref Message m) { if (m.Msg == (int)WM_NCHITTEST) m.Result = (IntPtr)HTTRANSPARENT; else base.WndProc(ref m); } 

Подобное тестирование можно выполнить в Python с использованием API-интерфейсов win32. Это часть кода Python, которая делает именно это. Найдите часть, где программист устанавливает обратный вызов для события (что-то вроде win32con.WM_NCHITTEST: self.onChi, где self.onChi – это обратный вызов).

Надеюсь, это даст вам отправную точку. Я сомневаюсь, что есть что-то готовое, что вы найдете из коробки, но это должно дать вам несколько указаний на то, что нужно искать.

  • Получить количество всех ключей в словаре словарей в Python
  • Ошибка при загрузке ошибки python27.dll для pyinstaller
  • Numpy, Добавить столбец в существующий структурированный массив
  • кодирование / декодирование строки python
  • matplotlib: изменить текущий экземпляр оси (т.е. gca ())
  • Функция сдвига текста в Python
  • Коллекция переключателей в mongoengine для поиска
  • Как я могу получить последнее модифицированное время с помощью python3 urllib?
  • как организовать файлы с помощью python27 app engine webapp2 framework
  • Элементы словаря, не работающие при передаче команды powershell
  • Элемент больше не привязан к DOM и исключениям времени ожидания
  • Python - лучший язык программирования в мире.