Как я могу отображать текст на StatusIcon вместо установки значка? - PullRequest
4 голосов
/ 13 октября 2011

Я начинающий разработчик в Gtk, а также в Python. Я пытаюсь создать gtk.StatusIcon, отображающий текстовую строку вместо иконки. Как я могу сделать это с PixBuf или любым другим способом?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 06 октября 2014

Пример использования 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 для примера кода, который использует эту библиотеку.

0 голосов
/ 13 октября 2011

Это возможно - на ум приходят две идеи:

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/

...