Как получить значок для файла, используя gio и python3 - PullRequest
1 голос
/ 07 февраля 2020

Я хочу получить значок по умолчанию для соответствующего файла с помощью gtk.

Я попробовал этот метод в python3, но он выдал ошибку

from gi.repository import Gio as gio
from gi.repository import Gtk
import os

def get_icon_filename(filename,size):
    #final_filename = "default_icon.png"
    final_filename = ""
    if os.path.isfile(filename):
        # Get the icon name
        file = gio.File(filename)
        file_info = file.query_info('standard::icon')
        file_icon = file_info.get_icon().get_names()[0]
        # Get the icon file path
        icon_theme = gtk.icon_theme_get_default()
        icon_filename = icon_theme.lookup_icon(file_icon, size, 0)
        if icon_filename != None:
            final_filename = icon_filename.get_filename()

    return final_filename


print(get_icon_filename("/home/newtron/Desktop/Gkite_Logo.png",64))

Ошибка

  File "geticon", line 11, in get_icon_filename
    file = gio.File(filename)
TypeError: GInterface.__init__() takes exactly 0 arguments (1 given)

У меня нет опыта работы с модулем gio , Есть ли в моем коде проблемы? Если нет, что является решением этой ошибки.

1 Ответ

0 голосов
/ 08 февраля 2020

Как сказал мой друг @ stovfl , это потому, что я использовал старые коды Gi и Gtk для python2. Но в новой версии gio.File атрибут имеет больше податрибутов (классов), которые определяют, какой тип свойства файла задан, например, класс

new_for_path. Я использовал это в своем коде и работал с ним. На самом деле я получил этот код из другого обсуждения StackOverflow.

Когда я проверил его снова, он имел python3 код

#!/usr/bin/env python
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gio as gio
from gi.repository import Gtk as gtk
import os

def get_icon_filename(filename,size):
    #final_filename = "default_icon.png"
    final_filename = ""
    if os.path.isfile(filename):
        # Get the icon name
        file = gio.File.new_for_path(filename)
        file_info = file.query_info('standard::icon',0)
        file_icon = file_info.get_icon().get_names()[0]
        # Get the icon file path
        icon_theme = gtk.IconTheme.get_default()
        icon_filename = icon_theme.lookup_icon(file_icon, size, 0)
        if icon_filename != None:
            final_filename = icon_filename.get_filename()

    return final_filename


print(get_icon_filename("/home/newtron/Desktop/counter.desktop",48))
...