如何在状态图标上显示文本而不是设置图标?

4 投票
2 回答
898 浏览
提问于 2025-04-17 04:12

我是一名刚入门的Gtk开发者,同时也在学习Python。我想创建一个gtk.StatusIcon,用文本字符串代替图标。请问我该如何使用PixBuf或者其他方法来实现这个呢?

谢谢。

2 个回答

4

下面是一个使用Python和GTK3的例子:

from gi.repository import Gtk

class TextStatusIcon:
  def __init__(self):
    self.statusicon = Gtk.StatusIcon()
    self.statusicon.connect("popup-menu", self.right_click_event)

    window = Gtk.OffscreenWindow()
    window.add(Gtk.Label("text"))
    window.connect("damage-event", self.draw_complete_event)
    window.show_all()

  def draw_complete_event(self, window, event):
    self.statusicon.set_from_pixbuf(window.get_pixbuf())

  def right_click_event(self, icon, button, time):
    Gtk.main_quit()

TextStatusIcon()
Gtk.main()

不幸的是,大多数系统托盘对图标的高度限制得非常小,而Gtk.StatusIcon会自动缩小图像,这样宽度和高度都会小于这个高度限制。这就大大限制了你可以用Gtk.StatusIcon有效显示的文本量。

你可以查看这个链接 https://github.com/PaulSD/Tray_Apps/tree/master/gtktrayicon,这里有一个库(可以和Gtk一起安装),它提供了一个API,可以用来实现更通用的系统托盘小工具,并且支持任意长度的文本字符串。还有这个链接 https://github.com/PaulSD/Tray_Apps,里面有使用这个库的示例代码。

0

这是可能的,下面有两个想法:

a.) 可以使用一个屏幕外的 GtkLabel,然后调用 gdk_pixbuf_get_from_drawable (gtk_widget_get_snapshot (label)) (GdkPixmap 是一种 GdkDrawable)。这个方法会通过 XGetImage 从 X 服务器获取像素。

b.) 另外,你也可以使用 Cairo 来把文字绘制到 pixbuf 上——这个方法在 GNOME 的键盘状态图标中就用过:http://blogs.gnome.org/sudaltsov/category/general/

撰写回答