Python 3.x 全屏运行不一致

Python 3.x 全屏运行不一致,python-3.x,pygame,Python 3.x,Pygame,我的目标是创建一个可以调整自身大小并进入全屏模式的窗口。调整大小效果很好,但当我进入全屏时,它将如下所示: 蓝色正方形应该居中,白色正方形也应该居中。我已经找到了原因,但我不知道为什么会发生这种情况,也不知道如何解决。如果屏幕的高度小于窗口的高度,则会导致这种情况。那么,当我进入全屏时,背景和蓝色方块会在我的屏幕上居中,我该怎么做呢 import pygame import sys from pygame.locals import * from math import floor # In

我的目标是创建一个可以调整自身大小并进入全屏模式的窗口。调整大小效果很好,但当我进入全屏时,它将如下所示:

蓝色正方形应该居中,白色正方形也应该居中。我已经找到了原因,但我不知道为什么会发生这种情况,也不知道如何解决。如果
屏幕的高度小于
窗口的高度,则会导致这种情况。那么,当我进入全屏时,背景和蓝色方块会在我的屏幕上居中,我该怎么做呢

import pygame
import sys
from pygame.locals import *
from math import floor

# Initialize ------------------------------------------------------------------------------------- #
pygame.init()
FPS = 60
clock = pygame.time.Clock()
SCREEN_SIZE = [800, 450]
SCREEN_RATIO = SCREEN_SIZE[0]/SCREEN_SIZE[1]
window_size = [800, 450]
screen = pygame.Surface(SCREEN_SIZE)
window = pygame.display.set_mode(window_size, RESIZABLE)
pygame.display.set_caption('Project')

monitor_size = pygame.display.list_modes()[0]
print(monitor_size)

def display_edges(surface, color=(255, 0, 0)):
    pygame.draw.aaline(surface, color, (window_size[0] - 1, 0), (window_size[0] - 1, window_size[1] - 1))
    pygame.draw.aaline(surface, color, (0, window_size[1] - 1), (window_size[0] - 1, window_size[1] - 1))
    pygame.draw.aaline(surface, color, (0, 0), (window_size[0] - 1, 0))
    pygame.draw.aaline(surface, color, (0, 0), (0, window_size[1] - 1))

full_screen = False

# Game loop -------------------------------------------------------------------------------------- #
running = True
while running:

    # Event loop --------------------------------------------------------------------------------- #
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
            
        elif event.type == VIDEORESIZE:
            window_size = (event.w, event.h)
            window = pygame.display.set_mode(window_size, RESIZABLE)

        if event.type == KEYDOWN:
            if event.key == K_F5:
                full_screen = not full_screen
                
                if full_screen:
                    window_size_before = window_size
                    window_size = monitor_size
                    window = pygame.display.set_mode(window_size, FULLSCREEN)
                    screen = pygame.transform.scale(screen, window_size)
                else:
                    window_size = window_size_before
                    window = pygame.display.set_mode(window_size, RESIZABLE)
                    screen = pygame.Surface(SCREEN_SIZE)

    # Render ------------------------------------------------------------------------------------- #
    screen.fill((240, 240, 240))
    pygame.draw.rect(screen, (0, 100, 200), (SCREEN_SIZE[0]/2-25, SCREEN_SIZE[1]/2-25, 50, 50))
    
    if window_size[0]/window_size[1] > SCREEN_SIZE[0]/SCREEN_SIZE[1]:
        SCREEN_SIZE[1] = window_size[1]
        SCREEN_SIZE[0] = floor(window_size[1]*SCREEN_RATIO)
        screen = pygame.transform.scale(screen, SCREEN_SIZE)

    elif window_size[0]/window_size[1] < SCREEN_SIZE[0]/SCREEN_SIZE[1]:
        SCREEN_SIZE[0] = window_size[0]
        SCREEN_SIZE[1] = floor(window_size[0]/SCREEN_RATIO)
        screen = pygame.transform.scale(screen, SCREEN_SIZE)
   
    window.blit(screen, (window_size[0]/2 - SCREEN_SIZE[0]/2, window_size[1]/2 - SCREEN_SIZE[1]/2))
    display_edges(window)
    
    # Update ------------------------------------------------------------------------------------- #
    pygame.display.update()
    clock.tick(FPS)
    

pygame.quit()
sys.exit()


导入pygame
导入系统
从pygame.locals导入*
从数学导入层
#初始化-------------------------------------------------------------------#
pygame.init()
FPS=60
clock=pygame.time.clock()
屏幕大小=[800450]
屏幕大小比率=屏幕大小[0]/屏幕大小[1]
窗口大小=[800450]
屏幕=pygame.Surface(屏幕大小)
window=pygame.display.set_模式(窗口大小,可调整大小)
pygame.display.set_标题('Project')
monitor_size=pygame.display.list_modes()[0]
打印(显示器尺寸)
def显示_边(表面,颜色=(255,0,0)):
pygame.draw.aaline(表面,颜色,(窗口大小[0]-1,0),(窗口大小[0]-1,窗口大小[1]-1))
pygame.draw.aaline(表面,颜色,(0,窗口大小[1]-1),(窗口大小[0]-1,窗口大小[1]-1))
pygame.draw.aaline(表面,颜色,(0,0),(窗口大小[0]-1,0))
pygame.draw.aaline(表面,颜色,(0,0),(0,窗口大小[1]-1))
全屏=假
#游戏循环--------------------------------------------------------------------#
运行=真
运行时:
#事件循环--------------------------------------------------------------------#
对于pygame.event.get()中的事件:
如果event.type==退出:
运行=错误
elif event.type==VIDEORESIZE:
窗口大小=(event.w,event.h)
window=pygame.display.set_模式(窗口大小,可调整大小)
如果event.type==KEYDOWN:
如果event.key==K_F5:
全屏=非全屏
如果全屏显示:
窗口大小之前=窗口大小
窗口大小=监视器大小
window=pygame.display.set_模式(窗口大小,全屏)
screen=pygame.transform.scale(屏幕、窗口大小)
其他:
窗口大小=之前的窗口大小
window=pygame.display.set_模式(窗口大小,可调整大小)
屏幕=pygame.Surface(屏幕大小)
#渲染-------------------------------------------------------------------#
屏幕填充((240240240))
pygame.draw.rect(屏幕,(01100200),(屏幕大小[0]/2-25,屏幕大小[1]/2-25,50))
如果窗口大小[0]/窗口大小[1]>屏幕大小[0]/屏幕大小[1]:
屏幕大小[1]=窗口大小[1]
屏幕大小[0]=地板(窗口大小[1]*屏幕比例)
screen=pygame.transform.scale(屏幕,屏幕大小)
elif窗口大小[0]/窗口大小[1]<屏幕大小[0]/屏幕大小[1]:
屏幕大小[0]=窗口大小[0]
屏幕大小[1]=地板(窗口大小[0]/屏幕比例)
screen=pygame.transform.scale(屏幕,屏幕大小)
blit(屏幕,(窗口大小[0]/2-屏幕大小[0]/2,窗口大小[1]/2-屏幕大小[1]/2))
显示边缘(窗口)
#更新---------------------------------------------------------#
pygame.display.update()
时钟滴答声(FPS)
pygame.quit()
sys.exit()

“我找到了原因”-问题的原因是什么?我问这个问题是因为我无法重现它。如果屏幕高度小于窗口高度,那么错误就会重现。实际上,我现在不太确定原因。我知道,如果在程序运行时按f5键,而不进行任何调整,那么@rabbi76的伸缩性就不好