Pythonic方式加载图像资源

问题描述 投票:0回答:2

我有一个名为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)

哪些(或其他方法)是加载图像最干燥,最易于理解的方法?

python python-3.x pyglet
2个回答
0
投票

您可以考虑将字典理解与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']

0
投票

您可以使用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)

要么:

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.