def iconFromTheme(*names, **kwargs): size = kwargs["size"] if "size" in kwargs else 32 try: from PyKDE4.kdeui import KIcon for name in names: if KIcon.hasThemeIcon(name): return KIcon(name) except: pass if get_desktop() == "generic": try: from gtk import icon_theme_get_default iconTheme = icon_theme_get_default() for name in names: iconInfo = iconTheme.lookup_icon(name, size, 0) if iconInfo: return QIcon(iconInfo.get_filename()) except: pass for name in names: if QIcon.hasThemeIcon(name): return QIcon(QIcon.fromTheme(name)) return QIcon()
def detect_dir_icon(self, root): """Detectar si el directorio tiene un icono, y si es afirmativo, devolver la ruta del mismo. """ if not os.path.exists(root): return False # KDE if '.directory' in os.listdir(root): # .directory es un archivo de meta-datos que se encuentra dentro del # directorio con información sobre el mismo, uno de los datos posibles # es el icono. data = open(os.path.join(root, '.directory')).read() icon = re.findall('Icon=(.+)', data, re.MULTILINE) if not icon: return False icon = icon[0] if not icon.startswith('/') and pykde_available: # El icono no es una ruta al icono, sino el nombre del mismo, y se # necesita obtener del directorio del tema de iconos del sistema. if not KIcon.hasThemeIcon(icon): return False theme = str(KIcon.themeName()) path = '/tmp/%s:%s.png' % (theme, icon) if not os.path.exists(path): KIcon(icon).pixmap(QSize(64, 64)).save(path) return path if not icon.startswith('/') and not pykde_available: # Es como el caso anterior un nombre del icono, pero no se posee # el directorio de iconos, por lo que el proceso fallará return False else: # Es una ruta al icono, se devuelve return icon return False