DCA*_*CA- 7 python pygame window python-2.7
我正在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()
Run Code Online (Sandbox Code Playgroud)
这会在屏幕顶部创建一个Pygame窗口.
我的问题是Pygame窗口阻止任何鼠标与其下面的任何东西进行交互.
有没有办法允许忽略鼠标事件并"通过"窗口,例如点击Pygame窗口下面的桌面图标.
您将需要做一些额外的黑客工作,这超出了 PyGame 为您提供的范围。应该可以将 PyGame 画布渲染到 Python 中的另一个窗口框架中,并尝试使用该库的高级功能来实现这一点。
wxWidgets 就是一个例子。正如该线程中所述,这听起来与您想要实现的目标非常相似,用户设置了一个可以点击并且透明的窗口。
另请参阅另一篇 Stackoverflow 帖子,其中提到如何在 C# 中处理命中测试。在这里发布该帖子的代码:
protected override void WndProc(ref Message m)
{
if (m.Msg == (int)WM_NCHITTEST)
m.Result = (IntPtr)HTTRANSPARENT;
else
base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)
可以使用 win32 API 在 Python 中进行类似的测试。这是一段 Python 代码,正是执行此操作的。找到程序员为事件设置回调的部分(例如回调在win32con.WM_NCHITTEST: self.onChi,哪里)。self.onChi
我希望这能为您提供一个起点。我怀疑是否有任何现成的东西可以开箱即用,但这些应该会给你一些关于寻找什么的指导。
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |