Search code examples
pythongtkappindicator

Python : Add url to menu in appindicator


I'm trying to make a little application with appindicator and Gtk. My goal is to display a list of server with link to url of them.

Here is what I try :

from gi.repository import Gtk as gtk
from gi.repository import AppIndicator3 as appindicator

def main():
    indicator = appindicator.Indicator.new(APPINDICATOR_ID, img, appindicator.IndicatorCategory.SYSTEM_SERVICES)
    indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
    indicator.set_menu(build_menu())
    gtk.main()

def build_menu():
    menu = gtk.Menu()

    value = "label"
    item = gtk.MenuItem()
    button = gtk.LinkButton("http://url/host/id", label=value)
    button.show()

    item.add(button)
    item.show()

    menu.append(item)
    menu.show_all()

    return menu

if __name__ == "__main__":
    main()

That's working and I have no errors. But wen I launch application, I've only menu, with items but no link.

I've seen many exemple with gtk.Window but nothing with a menu for appindicator.

Is there a way to have link in this menu ?

Thanks


Solution

  • I've found a way to do that. I'm not sure it's the best way, but it works.

    Instead of create a LinkItem, I've made a function for open url:

    def open_url(source):
        webbrowser.open("http://url/host/id")
    

    And I call it after, with connect :

    item.connect("activate", open_url)
    

    When I run my app and click on my item, it opens url as expected. Here is part of code working:

    def build_menu():
        menu = gtk.Menu()
    
        value = "label"
        item = gtk.MenuItem(value)
        item.connect("activate", open_url)
    
        menu.append(item)
        menu.show_all()
    
        return menu
    

    As I see in many post on web, appindicator has limited functions compared to normal Gtk application.