Найти - Пользователи
Полная версия: pygame - изменение размера окна
Начало » Python для новичков » pygame - изменение размера окна
1
luckmaster
и снова здравствуйте! :)

вот еще есть проблемка с изменением размеров окна.
Вот код для наглядности:
import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480), pygame.RESIZABLE)

while True:
for e in pygame.event.get():
if e.type == pygame.QUIT: exit(0)
screen.fill((255, 255, 255))
pygame.display.update()
В результате выполнения этого кода размер окна изменяется, но проблема в том что область для рисования остается прежнего размера.
Ну например если увеличить окно, тогда в верхнем левом углу будет белый квадрат размером 640 * 480, а вся остальная область окна будет черной. А мне нужно чтобы этот белый квадрат увеличивался вместе с размерами самого окна.

Кто что посоветует сделать?
bw
> белый квадрат размером 640 * 480
(Овал, это круг вписанный в квадрат 3x4 :-)

Посмотри что будет с pygame.display.get_surface().get_size(), любопытно. Возможно потребуется ловить событие и что-то химичить ручками.
А может вообще проблема решится, если ты перейдешь на pygame.display.get_surface(), и не будешь использовать некий screen.

p.s. Вероятно при изменении разрешения, создается новый Surface, так как их размер не меняем, хотя х.з.

..bw
luckmaster
> Вероятно при изменении разрешения, создается новый Surface
Для меня было бы проще если бы так оно и было, но нет - Surface остается старого размера.
pygame.display.get_surface().get_size() возвращает старое разрешение 640 * 480.

Но вобще я уже разобрался, действительно надо было ловить событие:
Вот пример, если вдруг кому понадобится http://www.pygame.org/wiki/WindowResizing?parent=CookBook

Благодарю за помощь.
gabin
У меня такая проблема - есть код, который обрабатывает событие изменения окна.
background_image_filename = 'image.jpg'

import pygame
from pygame.locals import *
from sys import exit

SCREEN_SIZE = (640, 480)

pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32)

background = pygame.image.load(background_image_filename).convert()

while True:

event = pygame.event.wait()
if event.type == QUIT:
exit()
if event.type == VIDEORESIZE:
SCREEN_SIZE = event.size
screen = pygame.display.set_mode(SCREEN_SIZE, RESIZABLE, 32)
pygame.display.set_caption("Window resized to "+str(event.size))

screen_width, screen_height = SCREEN_SIZE
for y in range(0, screen_height, background.get_height()):
for x in range(0, screen_width, background.get_width()):
screen.blit(background, (x, y))

pygame.display.update()
Код выполняется и размеры окна можно менять, но если сделать размеры окна больше, чем при создании, то скрипт завершается с ошибкой:
Fatal Python error: (pygame parachute) Segmentation Fault
хотя по идее, новое пространство должно заполняться всё тем же background`ом.
В качестве image.jpg брал рисунок размером 640х480.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB