检查PyGame / SDL中的窗口尺寸

时间:2013-05-08 13:54:33

标签: sdl pygame window-managers

是否有另一种获取窗口尺寸而非pygame.display.Info()或曲面pygame.display.set_mode()返回的方法?

我正在使用可调整大小的窗口开发一个软件。虽然设置默认尺寸对于大多数窗口管理器来说都是可以的,但是平铺尺寸(例如Awesome,Xmonad等)会使窗口非常适合他们选择的动态尺寸。在SDL创建初始窗口后,此重新安装发生得如此之快,它不会生成具有新(正确)维度的pygame.VIDEORESIZE事件。

现在情况很好,如果一开始我生成一个虚假的videoresize事件,新的大小为0:

P.event.post(P.event.Event(P.VIDEORESIZE, size=(0,0), w=0, h=0))

至少Xmonad会看到这个并再次调整大小。我有一种预感,它与传统的窗口管理器不一样。可能窗口可以覆盖所有屏幕区域。

有没有更好的方法来确定帧大小?

1 个答案:

答案 0 :(得分:1)

在pygame.event.get()下有event.size,event.h和event.w,它检索窗口尺寸

所以例如我通过调用even.w,event.h重新调整背景颜色的大小,因为否则屏幕会重新调整大小,但我会得到一个白色方块。你也可以使用list_modes然后用index来调用你认为你想要的列表从大到小,所以[0]是全屏的

for event in pygame.event.get():
    if event.type ==  QUIT:
        terminate()
    elif event.type == KEYDOWN and event.key == K_ESCAPE:
        terminate()
    elif event.type == VIDEORESIZE:
        displaysurf = pygame.display.set_mode((event.w, event.h),RESIZABLE)
        displaysurf.fill(WHITE)
    elif event.type == KEYDOWN and event.key == K_f:
        displaysurf = pygame.display.set_mode(pygame.display.list_modes()[0],RESIZABLE)
        displaysurf.fill(WHITE)
    pygame.event.clear()