如何为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])
答案 0 :(得分:2)
我可能会弄错,这里有一些想法:
/usr/share/icons/Mint-X/categories/96/applications-mail.svg
scalable
目录中。可能你发现的svg并没有被认出来。例如。我有: /usr/share/icons/Tango/scalable/apps/internet-mail.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。
这来自developers' site:
[gtk_icon_theme_get_icon_sizes]返回一个整数数组,描述图标的大小 没有缩放可用。大小为-1表示图标为 以可扩展的格式提供。
修改:更多想法:
Gtk使用gdk-pixbuf.loaders模块渲染图标等图像。您可能没有svg驱动程序正常工作。我似乎也记得librsvg库是必要的。
即使另一个图标确实有效,您可能会看到图标缓存中的副本,而您的图标渲染器可能仍然失败。
图标缓存本身甚至可能存在问题。试试rebuilding the cache。