根据文件的MIME类型获取图标,Linux + Python

3

核心问题:

如何将mimetype - image/png转换为实际的图标文件路径 - /usr/share/icons/Menda-Circle/mimetypes/24x24/application-image-png.svg,同时尊重Linux发行版DE的图标主题集?


解决进展:

mimetypes.guess_type()可以根据文件名轻松获取文件的mimetype,这还算可以。

不太容易的是将该mimetype转换为指向图标的路径。

到目前为止,我没有运用Linux自己的xdg-utils或pyxdg来检测图标主题,也无法进一步推进。PyQt5似乎也有问题,这很容易理解,因为大多数DE都不基于Qt。也许在KDE上会有所改善。

所以通过一些搜索,我可以使用Gtk来检测图标主题。

from gi.repository import Gtk
print(Gtk.Settings.get_default().get_property("gtk-icon-theme-name"))

现在我所处的位置就是这样,我想通过一些工作和调整来编写一些函数,以便在大多数常见的发行版/桌面环境中获取图标,并针对大多数常见的图标主题进行优化。假设我能够找出将MIME类型转换为图标文件名的模式。

但是所有这些都感觉应该已经完成了。这是一种freedesktop标准,每个文件管理器或任何带有文件选择器或显示文件和文件夹的程序都在使用此功能,不是吗?

有没有一种好的优雅的方法来解决这个问题呢?


1
GTK+似乎使用GLib从文件本身获取文件的图标,而无需先获取MIME类型;请参见此处。不确定Qt是否有类似的功能。 - andlabs
自2016年1月以来,您有取得任何进展吗?我正在以下链接中寻找类似的答案:https://askubuntu.com/questions/912370/list-of-file-types-and-default-ubuntu-applications-to-open-with 和 https://askubuntu.com/questions/912622/command-to-return-path-file-name-of-icon-matching-file-types。 - WinEunuuchs2Unix
2个回答

2

1

使用TingPing的链接https://lazka.github.io/pgi-docs/#Gio-2.0/functions.html#Gio.content_type_get_icon后,您可以获得可能图标的列表。然后,您需要拆分此列表并找到最具体的匹配图标文件。

import gi
gi.require('Gtk','3.0')
from gi.repository import Gtk, Gio # Debian package python3-gi
icon_theme = Gtk.IconTheme.get_default()

mimetype = "image/png"
image_file = None
icon = Gio.content_type_get_icon(mimetype)
for entry in icon.to_string().split():
    if entry != "." and entry != "GThemedIcon":
        try:
            image_file = icon_theme.lookup_icon(entry,32,0).get_filename()
        except:
            # file must not exist for this entry
            pass
        if image_file:
            break
print("Mimetype {0} can use icon file {1}".format(mimetype,image_file))

参考资料
  1. https://dev59.com/Qm025IYBdhLWcg3wSkEq#15286059

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接