Python 2.7 在pygame中创建窗口而不显示它

Python 2.7 在pygame中创建窗口而不显示它,python-2.7,pygame,Python 2.7,Pygame,我使用以下方法在pygame中创建屏幕: screen = pygame.display.set_mode((width,height)) 然后我在上面随机画了200个灰度圈,并将屏幕保存为图像。(我需要将此屏幕另存为图像,以便稍后将其与目标图像进行比较): 现在,我需要随机更改不同圆的不同参数,方法是将包含所有圆的圆参数的numpy数组放在一个循环中,以一个大的数字作为其迭代值 我需要在屏幕上重新绘制变异的圆圈(在每次迭代结束时),并再次将该屏幕保存为png图像 现在的问题是,每次我使用py

我使用以下方法在pygame中创建屏幕:

screen = pygame.display.set_mode((width,height))
然后我在上面随机画了200个灰度圈,并将屏幕保存为图像。(我需要将此屏幕另存为图像,以便稍后将其与目标图像进行比较):

现在,我需要随机更改不同圆的不同参数,方法是将包含所有圆的圆参数的numpy数组放在一个循环中,以一个大的数字作为其迭代值

我需要在屏幕上重新绘制变异的圆圈(在每次迭代结束时),并再次将该屏幕保存为png图像

现在的问题是,每次我使用
pygame.display.set_模式((宽度、高度))
时,它会打开显示窗口,显著降低我的程序速度

我想创建一个屏幕并将其保存在变量中,但不需要在每次迭代时显示该屏幕。我还没有弄清楚使用什么命令来避免显示屏幕


我感谢你的帮助

如果不希望出现窗口,请尝试创建如下曲面:

screen = pygame.Surface((width,height))

然后,您可以在此曲面上绘制圆,并以与以前相同的方式保存它。正如其他人所说,使用fill()方法清除曲面。

我可能最终会使用类似的方法。这仍然会弹出一个屏幕,但它将是微小的,永远不会更新

import pygame
from pygame.locals import *

pygame.init()

def circle_drawing(surf):
    pass
    #your circle drawing function using passed in surface

DISPLAY = (1, 1)
DEPTH = 32
FLAGS = 0
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
work_surface  = pygame.Surface((500,500))
count = 0
while True:
    ws = circle_drawing(work_surface.copy())
    pygame.image.save(ws, "circles_" + str(count)+".png")
    count +=1

我很好奇为什么你不断地创建新的显示器而不是修改现有的显示器。这样做也会抑制显示器的更新功能,除非调用显示器的更新函数。我相信有更好的方法来编写这段代码。但基本上我需要的是在每次迭代时更改屏幕上某些圆圈的一些参数,然后将屏幕保存为图像。然后获取该图像的像素值,将其与目标图像的像素值进行比较,并计算适合度值。@Mary:正如oxrock所发布的,您不需要每次迭代都创建一个新的屏幕表面。对于快速而肮脏的方法,您可以填充屏幕(调用),绘制圆圈并使用PyGames方法更新整个屏幕。之后,您可以将屏幕另存为图像。希望这有帮助:)@oxrock和elegent:我把pygame.display.flip()放在循环之外。通过这种方式,我在对圆圈进行所有修改后更新屏幕,而不是在每次修改后更新屏幕。非常感谢你的提示。我的程序现在运行得快多了,但我仍在寻找一种方法来完全阻止屏幕弹出,只将其保存为图像,然后从中提取像素值。好的,在配置显示表面之前,你不能在pygame中创建任何表面。尽管在这方面没有内存,但不是100%可以创建曲面,但是有一些限制,例如convert()不起作用。画圆圈和保存图片应该可以。我需要透明的圆圈,所以我必须在一个单独的表面上画每个圆圈,然后将这个表面点到这个新的表面上,而不是在屏幕上,但它工作了!我运行了50次迭代,速度非常快。现在我需要实现代码的其余部分并运行150000次迭代。我会把结果贴在这里。非常感谢你的帮助!
import pygame
from pygame.locals import *

pygame.init()

def circle_drawing(surf):
    pass
    #your circle drawing function using passed in surface

DISPLAY = (1, 1)
DEPTH = 32
FLAGS = 0
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
work_surface  = pygame.Surface((500,500))
count = 0
while True:
    ws = circle_drawing(work_surface.copy())
    pygame.image.save(ws, "circles_" + str(count)+".png")
    count +=1