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 – это обратный вызов).

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

  • WeakValueDictionary сохраняет ссылку на объект без более сильных ссылок
  • ImportError: нет модуля с именем PyQt5 - OSX Mavericks
  • Ошибка в модуле с именем curses
  • Как установить оправдание в текстовом поле Tkinter
  • cx_freeze не создает exe с помощью библиотеки pandas
  • Никакой поставляемой схемы и других ошибок при использовании request.get ()
  • Как связать Ctrl + / в python tkinter?
  • Python: сортировать файлы по дате времени более подробно
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.