Skip to content

Instantly share code, notes, and snippets.

@ntk148v
Forked from jmarroyave/myappindicator_v5.py
Created December 10, 2017 04:23
Show Gist options
  • Select an option

  • Save ntk148v/da4e1f651de0181f2e4ca2be288e91e3 to your computer and use it in GitHub Desktop.

Select an option

Save ntk148v/da4e1f651de0181f2e4ca2be288e91e3 to your computer and use it in GitHub Desktop.
Ubuntu AppIndicator to show Chuck Norris jokes - Updated to python 3
# This code is an example for a tutorial on Ubuntu Unity/Gnome AppIndicators:
# http://candidtim.github.io/appindicator/2014/09/13/ubuntu-appindicator-step-by-step.html
import os
import signal
import json
from urllib import request
from urllib.error import URLError
from urllib.request import urlopen
from gi.repository import Gtk as gtk
from gi.repository import AppIndicator3 as appindicator
from gi.repository import Notify as notify
APPINDICATOR_ID = 'myappindicator'
def main():
indicator = appindicator.Indicator.new(APPINDICATOR_ID, os.path.abspath('sample_icon.svg'), appindicator.IndicatorCategory.SYSTEM_SERVICES)
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
indicator.set_menu(build_menu())
notify.init(APPINDICATOR_ID)
gtk.main()
def build_menu():
menu = gtk.Menu()
item_joke = gtk.MenuItem('Joke')
item_joke.connect('activate', joke)
menu.append(item_joke)
item_quit = gtk.MenuItem('Quit')
item_quit.connect('activate', quit)
menu.append(item_quit)
menu.show_all()
return menu
def fetch_joke():
with urlopen('http://api.icndb.com/jokes/random?limitTo=[nerdy]') as req:
msg = req.read();
msg = msg.decode('utf-8')
joke = json.loads(msg)['value']['joke']
return joke
def joke(_):
notify.Notification.new("<b>Joke</b>", fetch_joke(), None).show()
def quit(_):
notify.uninit()
gtk.main_quit()
if __name__ == "__main__":
signal.signal(signal.SIGINT, signal.SIG_DFL)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment