当quit()时,pygame仍然使用.ttf文件



我试图运行这个简单的程序:

import os
import pygame
pygame.init()
font = pygame.font.Font('font.ttf', 20)
pygame.quit()
os.remove('font.ttf')

Pygame使用font.ttf文件。但当它关闭时,就不应该再使用它了。所以我应该能够删除该文件。但os似乎无法删除它(一个错误表明该文件被另一个进程使用(。

当我删除font = ...行时,一切都很正常。因此,我得出结论,即使使用quit()退出了pygame,字体文件仍在使用。

这是个虫子吗?我在文件中遗漏了什么吗?我也试过这样做,看看pygame.quit()是否在另一个需要时间处理的线程中运行,但错误仍然会发生:

...
import time
ok = False
while not ok:
time.sleep(1) # retry every second
try:
os.remove('font.ttf')
ok = True
except:
print('Error')
print('Success')

这里的问题是,无论出于什么原因,尽管使用了pygame退出方法,它都不会关闭它创建的文件处理程序。在这种情况下,您给它提供字体文件名,然后它打开文件,但完成后不会关闭文件。

解决这个问题的方法是给它一个文件处理程序,而不是文件名。然后,在您完成pygame之后,您可以自己关闭文件处理程序。

import os
import pygame
# Make file handler
f = open('font.ttf', "r")
pygame.init()
# Give it the file handler instead
font = pygame.font.Font(f, 20)
pygame.quit()
# Close the handler after you are done
f.close()
# Works! (Tested on my machine)
os.remove('font.ttf')

最新更新