Индикатор не работает на Ubuntu 16.04
Я написал простой индикаторный апплет для Ubuntu на python с gi.repository, который я успешно выполнял на своем Ubuntu 14.04 в течение долгого времени без каких-либо проблем. После того, как я обновился до Ubuntu 16.04, я начал видеть странное поведение. Я попробовал его на Ubuntu 14.04 еще раз, просто чтобы убедиться, что он работает нормально, но на Ubuntu 16.04 мои события меню не запускаются, и приложение иногда не отвечает, когда я пытаюсь изменить значок.
Некоторые основные индикаторы кода, которые работают в Ubuntu 14.04, но не в Ubuntu 16.04
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk as gtk
gi.require_version('AppIndicator3', '0.1')
from gi.repository import AppIndicator3 as appindicator
def main():
indicator = appindicator.Indicator.new(
'mytestindicator',
gtk.STOCK_INFO,
appindicator.IndicatorCategory.SYSTEM_SERVICES
)
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
indicator.set_menu(build_menu())
gtk.main()
def quit(source):
gtk.main_quit()
def build_menu():
menu = gtk.Menu()
item_quit = gtk.MenuItem('Quit')
item_quit.connect('activate', quit)
menu.append(item_quit)
menu.show_all()
return menu
if __name__ == '__main__':
main()
Поэтому мой вопрос: что изменилось между Ubuntu 14.04 и 16.04 и как я могу создать надежный индикаторный апплет, который будет работать в обеих системах?
Хотя я заметил одну вещь: в Ubuntu 14 у меня есть версия gi.repository 3.12.0, а в Ubuntu 16 - 3.20.0, но я не уверен, что это важно.
1 ответ
Как мы обсуждали:
#!/usr/bin/env python
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Notify', '0.7')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, GdkPixbuf, Gdk, Gio, GLib, AppIndicator3, Notify
import os, sys
APPINDICATOR_ID = 'Resource phone logger'
class GUI:
def __init__(self, menu):
menuitem_quit = Gtk.MenuItem('Quit')
menuitem_quit.connect('activate', Gtk.main_quit)
menu.append(menuitem_quit)
menu.show_all()
menu.connect('button-release-event', self.menu_button_release_event)
def menu_button_release_event (self, menu, event):
#code to only show left click
if event.button == 3:
menu.show()
else:
print ("show")
menu.hide()
def main():
Notify.init(APPINDICATOR_ID)
image = os.path.abspath('posting.svg')
indicator = AppIndicator3.Indicator.new(APPINDICATOR_ID, image, AppIndicator3.IndicatorCategory.APPLICATION_STATUS)
indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
menu = Gtk.Menu()
indicator.set_menu(menu)
app = GUI(menu)
Gtk.main()
Notify.uninit()
if __name__ == "__main__":
sys.exit(main())