Pythonic способ загрузки ресурсов изображения - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть файл с именем 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)

Какой из этих (или других методов) является наиболее СУХИМЫМ и приемлемый способ загрузки изображений?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Вы можете рассмотреть словарь в сочетании с модулем 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 голосов
/ 19 апреля 2019

Вы можете использовать свое словарное решение, чтобы получить то, что вы изначально хотели, используя 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)
...