如何获得我的pygame窗口的大小(宽x高)

时间:2016-04-15 17:35:24

标签: python pygame

我使用

创建了一个窗口
pygame.display.set_mode((width, height), 
                        pygame.OPENGL | pygame.DOUBLEBUF | pygame.RESIZABLE)

稍后在应用程序中,我希望能够向窗口询问其宽度和高度,以便我可以决定如何处理鼠标位置。

如何在程序的其他位置访问该pygame窗口的尺寸? (事件处理循环)

8 个答案:

答案 0 :(得分:14)

你想得到表面,然后从表面物体中获得尺寸。

使用元组解包:

w, h = pygame.display.get_surface().get_size()

答案 1 :(得分:5)

首先获取显示表面可以获得窗口大小。 pygame.display.get_surface(),然后在表面上调用get_width()/ get_height()。

答案 2 :(得分:3)

喜欢这个!

/(\r?\n)[^\r\n]*$/

答案 3 :(得分:2)

import pygame as pg
def create_window(width, height):
    """create a width x height resizable window/frame"""
    win = pg.display.set_mode((width, height), pg.RESIZABLE)
    # optional fill bg red, default is black
    win.fill((255, 0, 0))
    # optional title info
    sf = "size x=%s  y=%s" % (width, height)
    pg.display.set_caption(sf)

    # any extra code here ...
    # draw a white circle
    white = (255, 255, 255)
    # center can be fixed or calculated for resize
    center = (150, 150)
    radius = 100
    pg.draw.circle(win, white, center, radius)

    pg.display.flip()
    return win
pg.init()
width = 300
height = 200
win = create_window(width, height)
# event loop and exit conditions (windows titlebar x click)
while True:
    for event in pg.event.get():
        if event.type == pg.VIDEORESIZE:
            width, height = event.size
            # redraw win in new size
            win = create_window(width, height)
            print(win.get_size())  # test
        if event.type == pg.QUIT:
            raise SystemExit

试试这个。

希望它有所帮助。

答案 4 :(得分:2)

添加另一个答案,因为我还没有看到这个。

screen = pygame.display.set_mode() # Default to screen resolution.

area = screne.get_rect()

我们可以在屏幕上调用get_rect(),因为它是一个表面对象。 Area将是一个Rect对象,其中包含(0,0,width,height)信息。

答案 5 :(得分:1)

changed = False
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit(0)
        if event.type == pygame.VIDEORESIZE:
            scrsize = event.size  # or event.w, event.h
            screen = pygame.display.set_mode(scrsize,RESIZABLE)
            changed = True

在pygame.display.init doc page https://www.pygame.org/docs/ref/display.html#comment_pygame_display_update的评论中几乎完全相同 仅从2011-01-25T23:10:3​​5略微编辑 - 戴夫伯顿谢谢戴夫

答案 6 :(得分:0)

gameDisplay = pygame.display.set_mode((800,600))

x = gameDisplay.get_width()

y = gameDisplay.get_height()

答案 7 :(得分:0)

您可以使用pygame.Surface获取与显示关联的pygame.display.get_surface()对象:

window_surface = pygame.display.get_surface()
可以分别用get_width() get_height()

每个 Surface 对象的宽度和高度:

window_width = pygame.display.get_surface().get_width()
window_height = pygame.display.get_surface().get_height()

get_size()返回具有窗口宽度和高度的元组:

window_width, window_height = pygame.display.get_surface().get_size()

get_rect()返回一个窗口大小的矩形,始终从(0,0)开始:

这可用于获取显示的中心:

window_center = pygame.display.get_surface().get_rect().center

它甚至可以用于将对象移动到窗口区域:

object_rect = pygame.Rect(x, y, w, h)
object_rect.clamp_ip(pygame.display.get_surface().get_rect())

最小示例:

import pygame

pygame.init()
pygame.display.set_mode((200, 200))
clock = pygame.time.Clock()

object_rect = pygame.Rect(pygame.display.get_surface().get_rect().center, (0, 0)).inflate(30, 30)
vel = 5

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            print(pygame.key.name(event.key))

    keys = pygame.key.get_pressed()
    object_rect.move_ip(
        (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * vel,
        (keys[pygame.K_DOWN] - keys[pygame.K_UP]) * vel)
        
    object_rect.clamp_ip(pygame.display.get_surface().get_rect())

    pygame.display.get_surface().fill([64] * 3)
    pygame.draw.rect(pygame.display.get_surface(), (255, 0, 0), object_rect)
    pygame.display.flip()

pygame.quit()
exit()