我是Gtk和Python的初学者。我正在尝试创建一个gtk.StatusIcon来显示一个文本字符串来代替一个图标。我怎样才能用PixBuf或其他任何方式实现这一目标?
感谢。
答案 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/