SVG中的Python Gtk3窗口图标/股票主题中的可缩放图标

SVG中的Python Gtk3窗口图标/股票主题中的可缩放图标,python,icons,gtk3,Python,Icons,Gtk3,如何将高质量图标设置为Gtk.Window? 我的主题有SVG图标,但我总是得到24像素的大小。那么我的代码有什么问题?我很高兴能得到一些帮助。谢谢 最大大小始终为24: #!/usr/bin/python3 import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk window = Gtk.Window() window.connect("delete-event", Gtk.main_quit)

如何将高质量图标设置为Gtk.Window? 我的主题有SVG图标,但我总是得到24像素的大小。那么我的代码有什么问题?我很高兴能得到一些帮助。谢谢

最大大小始终为24

#!/usr/bin/python3

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)

icon_name = "applications-mail"
icon_theme = Gtk.IconTheme.get_default()

found_icons = set()
for res in range(0, 512, 2):
    icon = icon_theme.lookup_icon(icon_name, res, 0)
    found_icons.add(icon.get_filename())
print("\n".join(found_icons))
sizes = Gtk.IconTheme.get_default().get_icon_sizes(icon_name)
max_size = max(sizes)
print("max size = {} ({})".format(max_size, sizes))
pixbuf = icon_theme.load_icon(icon_name, max_size, 0)
window.set_default_icon_list([pixbuf])

window.show_all()
Gtk.main()
/usr/share/icons/Mint-X/categories/22/applications-mail.png
/usr/share/icons/Mint-X/categories/48/applications-mail.png
/usr/share/icons/Mint-X/categories/96/applications-mail.svg
/usr/share/icons/Mint-X/categories/32/applications-mail.png
/usr/share/icons/Mint-X/categories/16/applications-mail.png
/usr/share/icons/Mint-X/categories/24/applications-mail.png
max size = 24 ([22, 16, 24])
响应

#!/usr/bin/python3

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

window = Gtk.Window()
window.connect("delete-event", Gtk.main_quit)

icon_name = "applications-mail"
icon_theme = Gtk.IconTheme.get_default()

found_icons = set()
for res in range(0, 512, 2):
    icon = icon_theme.lookup_icon(icon_name, res, 0)
    found_icons.add(icon.get_filename())
print("\n".join(found_icons))
sizes = Gtk.IconTheme.get_default().get_icon_sizes(icon_name)
max_size = max(sizes)
print("max size = {} ({})".format(max_size, sizes))
pixbuf = icon_theme.load_icon(icon_name, max_size, 0)
window.set_default_icon_list([pixbuf])

window.show_all()
Gtk.main()
/usr/share/icons/Mint-X/categories/22/applications-mail.png
/usr/share/icons/Mint-X/categories/48/applications-mail.png
/usr/share/icons/Mint-X/categories/96/applications-mail.svg
/usr/share/icons/Mint-X/categories/32/applications-mail.png
/usr/share/icons/Mint-X/categories/16/applications-mail.png
/usr/share/icons/Mint-X/categories/24/applications-mail.png
max size = 24 ([22, 16, 24])

我可能弄错了,以下是一些想法:

  • 我的机器上没有任何名为“应用程序邮件”的图标。不过我确实发现了很多“互联网邮件”图标
/usr/share/icons/Mint-X/categories/96/applications-mail.svg

  • 另外,我认为svg图标应该位于
    scalable
    目录中。您找到的svg可能没有被识别出来。我有:
/usr/share/icons/Tango/scalable/apps/internetmail.svg

  • 我稍微修改了你的程序:
清单:

#!/usr/bin/env python3

from gi.repository import Gtk

class MainWindow(Gtk.Window):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.connect("delete-event", Gtk.main_quit)

        #icon_name = "applications-mail"
        icon_name = "internet-mail"
        icon_theme = Gtk.IconTheme.get_default()

        found_icons = set()
        for res in range(0, 512, 2):
            icon = icon_theme.lookup_icon(icon_name, res, 0)
            #print(icon)
            if icon != None:
                found_icons.add(icon.get_filename())

        if len(found_icons) > 0:
            print("\n".join(found_icons))
            sizes = Gtk.IconTheme.get_default().get_icon_sizes(icon_name)
            max_size = max(sizes)
            print("max size = {} ({})".format(max_size, sizes))
            pixbuf = icon_theme.load_icon(icon_name, max_size, 0)
            self.set_default_icon_list([pixbuf])

        self.show_all()

    def run(self):
        Gtk.main()


def main(args):
    mainwdw = MainWindow()
    mainwdw.run()

    return 0

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))
我得到:

/usr/share/icons/Tango/24x24/apps/internet-mail.png
/usr/share/icons/Tango/scalable/apps/internet-mail.svg
/usr/share/icons/Tango/16x16/apps/internet-mail.png
/usr/share/icons/Tango/32x32/apps/internet-mail.png
/usr/share/icons/Tango/22x22/apps/internet-mail.png
max size = 32 ([22, 16, 24, 32, -1, 0])
其中-1表示可缩放图标。(因此,不要使用
max()
-查找-1。 本文件来自:

[gtk_icon_theme_get_icon_sizes]返回一个整数数组,该数组描述图标的大小 无需缩放即可使用。大小为-1表示图标为 以可扩展的格式提供

编辑:更多想法:

  • Gtk使用gdk-pixbuf.loaders模块来呈现图标等图像。您可能无法正确使用svg驱动程序。我还记得librsvg库是必要的

  • 即使另一个图标实际工作,您也可能看到图标缓存中的副本,并且您的图标渲染器可能仍然失败

  • 图标缓存本身甚至可能有问题。请重试


非常感谢您的回答。我也可以使用其他图标名称或主题。但是,即使我使用主题“gnome”和图标“mail send symbolic”(只能作为可缩放图标使用),我也只能获得较低的分辨率。还有您的示例:-(我使用max的原因是,我想表明列表中甚至没有32或48个图标。我使用Mint 17(Ubuntu14.04),我将在接下来的几天将我的系统更新到Mint18(Ubuntu16.04)然后我会再试一次。如果我没记错的话,Gtk使用gdk-pixbuf.loaders模块来渲染图标等图像。您可能没有正确使用svg驱动程序。不同的驱动程序之间存在一些混淆。我似乎还记得librsvg库是必要的。请注意,一旦Gtk显示图标,我相信它就是ConvRTE到png,并从.svg独立显示…顺便问一下,您是否尝试将png移动到/scalable/?(和中有一些有趣的提示)