Python 更改Pygame窗口大小而不丢失内容

Python 更改Pygame窗口大小而不丢失内容,python,pygame,Python,Pygame,我正在制作一个程序,我想在不丢失内容的情况下重新调整窗口的大小。从某种意义上说,我想修剪窗户。如果内容被截断,则可以。以下是我试图做的: from pygame import * main = display.set_mode((800,600)) main.fill((255,255,255)) running = True while running: mx, my = mouse.get_pos() mb = mouse.get_pressed() for e in

我正在制作一个程序,我想在不丢失内容的情况下重新调整窗口的大小。从某种意义上说,我想修剪窗户。如果内容被截断,则可以。以下是我试图做的:

from pygame import *
main = display.set_mode((800,600))
main.fill((255,255,255))
running = True
while running:
    mx, my = mouse.get_pos()
    mb = mouse.get_pressed()
    for e in event.get():
        if e.type == QUIT:
            running = False
    if mb[0] == 1:
        draw.circle(main, (102,204,102), (mx, my), 10)
    elif mb[2] == 1:
        main = display.set_mode((200,200))
    display.flip()
quit()

当我更改屏幕时,它不会显示我在屏幕上绘制的内容。更改屏幕大小时,如何保留内容并裁剪内容?谢谢。

这实际上是不可能的。这些模块只会创建一个新屏幕并删除旧屏幕,包括圆圈。我已经尝试了几个小时,但是pygame文档只列出了创建和删除屏幕的模块。因此,不幸的是,如果不删除旧屏幕并创建新屏幕,则无法更改屏幕大小。

首先,由于要使屏幕重新调整大小,请确保在初始化屏幕时添加可调整大小的标志

main = display.set_mode((800,600), RESIZABLE, 32)
for e in event.get():
    if e.type == QUIT:
        running = False
    if e.type == VIDEORESIZE:
        print e.w, e.h, e.size
初始化后,窗口将重新调整大小。但是现在,您可以通过调整屏幕大小时发送的VIDEORESIZE事件访问屏幕的新大小

main = display.set_mode((800,600), RESIZABLE, 32)
for e in event.get():
    if e.type == QUIT:
        running = False
    if e.type == VIDEORESIZE:
        print e.w, e.h, e.size
现在您可以看到新的窗口尺寸。我还建议删除

elif mb[2] == 1:
    main = display.set_mode((200,200))

因为它只创建一个新屏幕,而不是调整它。而且它不会起作用

是否要从右侧和底部裁剪内容?仅从底部裁剪。我在上面的示例中使用了这两种方法,尽管这不是我的实际程序。我只想通过从底部调整来调整高度。您不应该使用main=display.set_模式。它只会创建另一个屏幕,而不会缩小它。我考虑过保存屏幕,更改大小,并在新窗口上快速显示保存的图像。我该怎么做呢?您是否特别希望200x200成为您的屏幕尺寸?或者它可以是动态的?我希望它在点击按钮时基本上在两种屏幕大小之间切换。我没有在我的代码中显示这一点,但在我的实际程序中我做到了。以SirBob为例,如何更改大小,而不是用户?