How to scale images to screen size in Pygame
You can scale the image with pygame.transform.scale
:
import pygamepicture = pygame.image.load(filename)picture = pygame.transform.scale(picture, (1280, 720))
You can then get the bounding rectangle of picture
with
rect = picture.get_rect()
and move the picture with
rect = rect.move((x, y))screen.blit(picture, rect)
where screen
was set with something like
screen = pygame.display.set_mode((1600, 900))
To allow your widgets to adjust to various screen sizes,you could make the displayresizable:
import osimport pygamefrom pygame.locals import *pygame.init()screen = pygame.display.set_mode((500, 500), HWSURFACE | DOUBLEBUF | RESIZABLE)pic = pygame.image.load("image.png")screen.blit(pygame.transform.scale(pic, (500, 500)), (0, 0))pygame.display.flip()while True: pygame.event.pump() event = pygame.event.wait() if event.type == QUIT: pygame.display.quit() elif event.type == VIDEORESIZE: screen = pygame.display.set_mode( event.dict['size'], HWSURFACE | DOUBLEBUF | RESIZABLE) screen.blit(pygame.transform.scale(pic, event.dict['size']), (0, 0)) pygame.display.flip()
If you scale 1600x900
to 1280x720
you have
scale_x = 1280.0/1600scale_y = 720.0/900
Then you can use it to find button size, and button position
button_width = 300 * scale_xbutton_height = 300 * scale_ybutton_x = 1440 * scale_xbutton_y = 860 * scale_y
If you scale 1280x720
to 1600x900
you have
scale_x = 1600.0/1280scale_y = 900.0/720
and rest is the same.
I add .0
to value to make float
- otherwise scale_x
, scale_y
will be rounded to integer
- in this example to 0
(zero) (Python 2.x)
i do not know if you meant this, but this is how to scale to the size of the screen an image at the max that is possible, without losing the aspect ratio of the image among width and height
row = pygame.image.load(f"{image}")x, y = row.get_size()rx = 1000 / xry = 600 / yprint(rx)print(ry)ratio = rx if rx < ry else ryrow = pygame.transform.scale(row, (int(x*rx), int(y*rx)))