加载图像资源的Pythonic方式
Pythonic way to load image resources
我有一个名为 resources.py
的文件,它加载要在主项目中使用的图像。
到目前为止,代码如下所示:
import pyglet
pyglet.resource.path = ["../resources", "C:/users/____/Pictures/useful icons"]
pyglet.resource.reindex()
checkbox_unchecked = pyglet.resource.image("checkbox_unchecked.png")
checkbox_checked = pyglet.resource.image("checkbox_checked.png")
checkbox_unchecked_dark = pyglet.resource.image("checkbox_unchecked_dark.png")
checkbox_checked_dark = pyglet.resource.image("checkbox_checked_dark.png")
checkbox_unchecked_thick = pyglet.resource.image("checkbox_unchecked_thick.png")
checkbox_checked_thick = pyglet.resource.image("checkbox_checked_thick.png")
checkbox_unchecked_disabled = pyglet.resource.image("checkbox_unchecked_disabled.png")
checkbox_checked_disabled = pyglet.resource.image("checkbox_checked_disabled.png")
我认为这是一种笨拙的方法,所以我想到的是:
import pyglet
pyglet.resource.path = ['../resources', "C:/users/____/Pictures/useful icons"]
pyglet.resource.reindex()
images = ["checkbox_unchecked.png", "checkbox_checked.png", ...]
for image in images:
exec(f'{image} = pyglet.resource.image("{image}")')
这当然使用了我知道不受欢迎的 exec 函数,因为通常有更好的方法来实现它。我能看到的唯一其他方法是创建字典。
像这样:
import pyglet
pyglet.resource.path = ['../resources', "C:/users/____/Pictures/useful icons"]
pyglet.resource.reindex()
images = ["checkbox_unchecked.png", "checkbox_checked.png", ...]
imageDict = {}
for image in images:
imageDict[image] = pyglet.resource.image(image)
Which of these (or other methods) is the most DRY-complient and
comprehensible way to load the images?
您可以使用字典解决方案通过使用 globals()
获得您最初想要的内容,它是所有全局变量的字典。
for image in images:
globals()[image.split('.')[0]] = pyglet.resource.image(image)
或者:
globals().update((image.split('.')[0], pyglet.resource.image(image)) for image in images)
您可以考虑将字典理解与 pathlib
模块结合使用,这样当您从字典中调用键时,您不必使用扩展名
调用它们
from pathlib import Path
import pyglet
pyglet.resource.path = ['../resources', "C:/users/____/Pictures/useful icons"]
pyglet.resource.reindex()
images = ["checkbox_unchecked.png", "checkbox_checked.png", ...]
imageDict = { Path(image).stem: pyglet.resource.image(image) for image in images }
然后你会得到你的图像:
imageDict['checkbox_unchecked']
我有一个名为 resources.py
的文件,它加载要在主项目中使用的图像。
到目前为止,代码如下所示:
import pyglet
pyglet.resource.path = ["../resources", "C:/users/____/Pictures/useful icons"]
pyglet.resource.reindex()
checkbox_unchecked = pyglet.resource.image("checkbox_unchecked.png")
checkbox_checked = pyglet.resource.image("checkbox_checked.png")
checkbox_unchecked_dark = pyglet.resource.image("checkbox_unchecked_dark.png")
checkbox_checked_dark = pyglet.resource.image("checkbox_checked_dark.png")
checkbox_unchecked_thick = pyglet.resource.image("checkbox_unchecked_thick.png")
checkbox_checked_thick = pyglet.resource.image("checkbox_checked_thick.png")
checkbox_unchecked_disabled = pyglet.resource.image("checkbox_unchecked_disabled.png")
checkbox_checked_disabled = pyglet.resource.image("checkbox_checked_disabled.png")
我认为这是一种笨拙的方法,所以我想到的是:
import pyglet
pyglet.resource.path = ['../resources', "C:/users/____/Pictures/useful icons"]
pyglet.resource.reindex()
images = ["checkbox_unchecked.png", "checkbox_checked.png", ...]
for image in images:
exec(f'{image} = pyglet.resource.image("{image}")')
这当然使用了我知道不受欢迎的 exec 函数,因为通常有更好的方法来实现它。我能看到的唯一其他方法是创建字典。
像这样:
import pyglet
pyglet.resource.path = ['../resources', "C:/users/____/Pictures/useful icons"]
pyglet.resource.reindex()
images = ["checkbox_unchecked.png", "checkbox_checked.png", ...]
imageDict = {}
for image in images:
imageDict[image] = pyglet.resource.image(image)
Which of these (or other methods) is the most DRY-complient and comprehensible way to load the images?
您可以使用字典解决方案通过使用 globals()
获得您最初想要的内容,它是所有全局变量的字典。
for image in images:
globals()[image.split('.')[0]] = pyglet.resource.image(image)
或者:
globals().update((image.split('.')[0], pyglet.resource.image(image)) for image in images)
您可以考虑将字典理解与 pathlib
模块结合使用,这样当您从字典中调用键时,您不必使用扩展名
from pathlib import Path
import pyglet
pyglet.resource.path = ['../resources', "C:/users/____/Pictures/useful icons"]
pyglet.resource.reindex()
images = ["checkbox_unchecked.png", "checkbox_checked.png", ...]
imageDict = { Path(image).stem: pyglet.resource.image(image) for image in images }
然后你会得到你的图像:
imageDict['checkbox_unchecked']