2013-05-08 67 views
1

是否有另一种方法可以获得除pygame.display.Info()之外的窗口尺寸或表面pygame.display.set_mode()的返回值?检查PyGame/SDL中的窗口尺寸

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

现在,事情很好地工作,如果在开始时我生成的0新尺寸的假videoresize事件:

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

至少Xmonad会看到这一点,并具有良好的尺寸再次调整。我有一种预感,它不会像传统的窗口管理器那样漂亮。窗户可能会覆盖所有的屏幕地产。

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

+0

'pygame.display.get_surface()get_rect()' – ninMonkey 2013-05-08 19:22:30

+0

@monkey:不。报告与其他方法相同。 – progo 2013-05-08 21:31:44

回答

1

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

所以例如我通过调用甚至重新定尺寸的背景颜色。 w,event.h,否则屏幕会重新调整大小,但我会得到一个白色方块。你也可以使用list_modes,然后使用索引来调用哪个列出你想你想从最大到最小,从而[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() 
+0

谢谢,但这回答了错误的问题。我有一个VIDEORESIZE处理程序,它在启动后有效。但是在窗口创建的一开始就没有正确调用它。 – progo 2014-01-23 08:47:01