#python #gtk #pygtk
#python #gtk #pygtk
Вопрос:
Я начинающий разработчик в Gtk, а также в Python. Я пытаюсь создать gtk.Значок состояния отображает текстовую строку вместо значка. Как я могу добиться этого с помощью PixBuf или любым другим способом?
Спасибо.
Ответ №1:
Пример использования 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.Значок состояния автоматически уменьшает размер пиксельного буфера, так что ширина и высота будут меньше, чем ограничение по высоте. Это серьезно ограничивает объем текста, который вы можете эффективно отображать с помощью Gtk.Значок состояния.
Смотрите https://github.com/PaulSD/Tray_Apps/tree/master/gtktrayicon для библиотеки (которая может быть установлена в дополнение к Gtk), которая предоставляет API для реализации более общих апплетов в системном трее и поддерживает текстовые строки произвольной длины. Смотрите https://github.com/PaulSD/Tray_Apps для примера кода, который использует эту библиотеку.
Ответ №2:
Это возможно — на ум приходят две идеи:
a.) Используйте закадровую GtkLabel, а затем вызовите gdk_pixbuf_get_from_drawable (gtk_widget_get_snapshot (label))
(GdkPixmap — это GdkDrawable.) Это выполнит XGetImage для получения пикселей с X-сервера.
б.) Или вы могли бы использовать Cairo для рисования текста в pixbuf — это метод, который использовался для значка статуса клавиатуры в GNOME:http://blogs.gnome.org/sudaltsov/category/general /
Комментарии:
1. Спасибо за предложения. Я посмотрю на Cairo’s one