我在python中有一个非常简单的应用程序,并使用GTK3作为gui。我只是想为它设置一个默认图标,所以它在Gnome-shell中的Dash中。
我绝望,我不知道自己做错了什么。
我使用了这段代码:
Gtk.Window.__init__(self, title="Window title")
icon=("firefox")
pixbuf24 = Gtk.IconTheme.get_default().load_icon(icon, 24, 0)
pixbuf32 = Gtk.IconTheme.get_default().load_icon(icon, 32, 0)
pixbuf48 = Gtk.IconTheme.get_default().load_icon(icon, 48, 0)
pixbuf64 = Gtk.IconTheme.get_default().load_icon(icon, 64, 0)
pixbuf96 = Gtk.IconTheme.get_default().load_icon(icon, 96, 0)
self.set_icon_list([pixbuf24, pixbuf32, pixbuf48, pixbuf64, pixbuf96]);
我没有收到任何错误消息,但是,没有显示任何图标。我选择 firefox 进行测试,并确保图标存在。
有人可以帮我弄清楚为什么图标不显示?
P.S。 我试图在我的计算机上运行@morningbird的代码,但图标仍然没有出现在Dash中。
Icon is shown in the window, but not in Dash
我必须将屏幕截图保留为链接,因为我不允许在此处添加图片。
答案 0 :(得分:2)
我终于找到了问题的原因。
Wayland 。代码在X11下工作正常,但在Wayland上没有。再次感谢@morningbird的帮助。我已经疯了。当我问这个问题时,我不知道那会有什么不同。
要让它在Wayland中运行,您必须使用
GLib.set_prgname('app_name')
app_name 必须与相应的*.desktop
文件中的 exec = 条目相对应。之后, name = 将用于应用程序名称, icon = 将用于Dash中的图标。
答案 1 :(得分:1)
我决定测试代码,看起来它应该正常工作。我将你的逻辑合并到Gtk.Window中,附加了IconViewer,看看加载到pixbufs中的图标。
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository.GdkPixbuf import Pixbuf
icon = ("firefox")
class IconViewWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.set_default_size(200, 200)
liststore = Gtk.ListStore(Pixbuf, str)
iconview = Gtk.IconView.new()
iconview.set_model(liststore)
iconview.set_pixbuf_column(0)
iconview.set_text_column(1)
pixbuf24 = Gtk.IconTheme.get_default().load_icon(icon, 24, 0)
pixbuf32 = Gtk.IconTheme.get_default().load_icon(icon, 32, 0)
pixbuf48 = Gtk.IconTheme.get_default().load_icon(icon, 48, 0)
pixbuf64 = Gtk.IconTheme.get_default().load_icon(icon, 64, 0)
pixbuf96 = Gtk.IconTheme.get_default().load_icon(icon, 96, 0)
self.set_icon_list([pixbuf24, pixbuf32, pixbuf48, pixbuf64, pixbuf96])
liststore.append([pixbuf64, "firefox"])
self.add(iconview)
win = IconViewWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
在Gnome 3.24下使用python3运行它,可以在短划线和所有DE元素中正确显示Gtk.Window的图标。
修改强>
也许做一个正确的图标发现(因为你目前没有使用自己安装的图标)可能有助于获得一些见解。
icon_name = "firefox"
icon_theme = Gtk.IconTheme.get_default()
found_icons = set()
for res in range(24, 32, 48, 64, 96):
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])
编辑2:
一般来说,使用Gtk.Window.set_icon_name("icon-name")
是更好的方式来使用已安装的图标,因为所有图标大小选项都将为您处理。在使用设置大小的本地PNG图标时,使用Gtk.Windowset_default_icon_list([pixbufs])
是一个不错的选择。
如果问题不在于“firefox”图标可用性,我会感到惊讶,因为这些方法已经过充分记录和测试。