Ubuntu 16.04上的指示器坏了

2024-06-12 11:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python为Ubuntu编写了一个简单的指示器applet地理信息库我已经在我的ubuntu14.04上成功运行了很长时间,没有任何问题。在我更新到Ubuntu16.04之后,我开始看到一些奇怪的行为。我在Ubuntu14.04上又试了一次,只是为了确保它能正常工作,但是在Ubuntu16.04上,我的菜单事件不会被触发,当我试图改变图标时,应用程序有时也不会响应。在

一些基本的代码指示符,可以在Ubuntu14.04上工作,但在Ubuntu16.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()

所以我的问题是ubuntu14.04和16.04之间发生了什么变化,如何创建一个可靠的指示器applet,在两个系统上都能平稳运行?在

但有一件事我注意到了,在Ubuntu14上地理信息库版本3.12.0,但在Ubuntu16上是3.20.0,但这并不重要。在


Tags: importgtkmaindefrequireitem地理quit
1条回答
网友
1楼 · 发布于 2024-06-12 11:22:03

正如我们所讨论的:

#!/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())

相关问题 更多 >