【问题标题】:pygame still uses the .ttf file when quit()pygame 在 quit() 时仍然使用 .ttf 文件
【发布时间】:2021-06-24 23:00:01
【问题描述】:

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

import os
import pygame

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

os.remove('font.ttf')

Pygame 使用font.ttf 文件。但是当它关​​闭时,它不应该再使用它了。所以我应该能够删除文件。但是os好像删不掉(报错说文件被另一个进程使用了​​)。

当我删除 font = ... 行时,一切正常。所以,我的结论是字体文件仍然被使用,即使pygamequit()退出。

这是一个错误吗?我错过了文档中的某些内容吗?我也试过这个,看看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.font.quit()
  • 它做同样的事情 - 和quit() “取消初始化之前已经初始化的所有pygame模块。”

标签: python pygame exit truetype


【解决方案1】:

这里的问题是,无论出于何种原因,尽管使用了 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2021-12-24
    相关资源
    最近更新 更多