В StackOverflow есть похожий вопрос, но он мне не помог: Смена предметов во время работы . Я пытался спросить в StackOverflow, но люди там, где не слишком активны: Как изменить меню GTK в апплете индикатора Unity? .
Проблема в том, что если я определю изменяющую функцию вне Gtk.main (), она никогда не будет выполнена, а внутри она будет выполнена только один раз. Если я сделаю бесконечный цикл внутри, Gtk.main () никогда не будет выполнен. Это мой код (модифицированный стандартный пример).
#!/usr/bin/env python
import sys
from gi.repository import Gtk, Gdk
from gi.repository import AppIndicator3 as appindicator
if __name__ == "__main__":
ind = appindicator.Indicator.new ("example-simple-client",
"indicator-messages",
appindicator.IndicatorCategory.APPLICATION_STATUS)
ind.set_status (appindicator.IndicatorStatus.ACTIVE)
ind.set_attention_icon ("indicator-messages-new")
menu = Gtk.Menu()
menu_quit = Gtk.MenuItem('Quit')
def add_item(menu, label):
menu.append(MenuItem(label))
menu.append(menu_quit)
def quit_app(w):
sys.exit(0)
menu_quit.connect('activate', quit_app)
menu_quit.show()
ind.set_menu(menu)
Gtk.main()
Куда мне добавить добавление новых пунктов меню (или изменение существующих) в коде? Я настоящий новичок в программировании GUI ...
Необходимо использовать
GLib.timeout_add(10, handler_timeout)
внутри кода индикатора, где 10 - это 10 миллисекунд, время между обновлениями и handler_timeout - функция, которая вызывается при каждом обновлении. Внутри этой функции можно выполнять все необходимые действия, например, проверять изменения в буфере обмена и редактировать меню.