import sys if sys.version_info < (3, 7): HAS_IMPORTLIB_RESOURCE = False from pkg_resources import resource_filename else: HAS_IMPORTLIB_RESOURCE = True from importlib.resources import path from ..Qt import QtGui, QtWidgets # def get_path_importlib(package, resource): # return path(package, resource) # # # def _get_path_pkg(package, resource): # return resource_filename(package, resource) # # # if HAS_IMPORTLIB_RESOURCE: # get_path = get_path_importlib # else: # get_path = _get_path_pkg def make_action_icons(widget): global HAS_IMPORTLIB_RESOURCE icon_type = QtWidgets.QApplication.instance().theme from json import loads if HAS_IMPORTLIB_RESOURCE: with path('resources.icons', 'icons.json') as fp: with fp.open('r') as f: icon_list = loads(f.read()) for ac, img in icon_list[widget.objectName()].items(): dirname = 'resources.icons.%s_light' % icon_type with path(dirname, img+'.png') as imgpath: icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(str(imgpath)), QtGui.QIcon.Normal, QtGui.QIcon.Off) getattr(widget, ac).setIcon(icon) else: with open(resource_filename('resources.icons', 'icons.json'), 'r') as f: icon_list = loads(f.read()) for ac, img in icon_list[widget.objectName()].items(): dirname = 'resources.icons.%s_light' % icon_type imgpath = resource_filename(dirname, img+'.png') icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(str(imgpath)), QtGui.QIcon.Normal, QtGui.QIcon.Off) getattr(widget, ac).setIcon(icon) def get_icon(icon_name): try: icon_type = QtWidgets.QApplication.instance().theme except AttributeError: icon_type = 'normal' global HAS_IMPORTLIB_RESOURCE if icon_name != 'logo': dirname = f'resources.icons.{icon_type}_light' else: dirname = 'resources.icons' if HAS_IMPORTLIB_RESOURCE: with path(dirname, icon_name+'.png') as imgpath: icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(str(imgpath)), QtGui.QIcon.Normal, QtGui.QIcon.Off) return icon else: imgpath = resource_filename(dirname, icon_name+'.png') icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(imgpath), QtGui.QIcon.Normal, QtGui.QIcon.Off) return icon