1

pygame.display.Info()除了表面pygame.display.set_mode()返回之外,还有其他方法可以获取窗口的尺寸吗?

我正在开发一款带有可调整大小窗口的软件。虽然为大多数窗口管理器设置默认尺寸是可以的,但平铺的(例如 Awesome、Xmonad 等)会积极地将窗口调整为他们选择的动态尺寸。在 SDL 创建初始窗口后,这种重新调整发生得如此之快,它不会生成pygame.VIDEORESIZE具有新(正确)尺寸的事件。

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

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

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

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

4

1 回答 1

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()
于 2014-01-23T02:24:18.023 回答