微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pygame 在退出时仍然使用 .ttf 文件

如何解决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 = ... 行时,一切正常。因此,我得出结论,即使使用 pygame 退出 quit(),字体文件仍在使用。

这是一个错误吗?我是否遗漏了文档中的某些内容?我也试过这个,看看 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')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。