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

时间:2011-10-13 00:38:57

标签: python gtk pygtk

我是Gtk和Python的初学者。我正在尝试创建一个gtk.StatusIcon来显示一个文本字符串来代替一个图标。我怎样才能用PixBuf或其他任何方式实现这一目标?

感谢。

2 个答案:

答案 0 :(得分:3)

使用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会自动缩小PixBuf,以便宽度和高度都小于高度限制。这严重限制了您可以使用Gtk.StatusIcon有效显示的文本量。

请参阅https://github.com/PaulSD/Tray_Apps/tree/master/gtktrayicon以获取库(可以在Gtk之外安装),该库提供用于实现更通用的系统托盘小程序的API,并支持任意长度的文本字符串。有关使用此库的示例代码,请参阅https://github.com/PaulSD/Tray_Apps

答案 1 :(得分: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/