Skip to content

Instantly share code, notes, and snippets.

@johnlane
Created February 24, 2017 09:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save johnlane/db6bf5247058e32ffa5d794af37b80a3 to your computer and use it in GitHub Desktop.
Save johnlane/db6bf5247058e32ffa5d794af37b80a3 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import gi
gi.require_version('Gtk','3.0')
gi.require_version('Keybinder', '3.0')
from gi.repository import Gtk, Gdk, Keybinder
class MenuBar(Gtk.Window):
def __init__(self, *args):
super().__init__(*args, name="bar")
# Create an undecorated dock
self.set_type_hint(Gdk.WindowTypeHint.DOCK)
self.set_decorated(False)
self.connect("delete-event", Gtk.main_quit)
action_group = Gtk.ActionGroup("my_actions")
action_group.add_actions([
("numbers", None, "Numbers", None, None, None),
("one", None, "One", None, None, self.callback),
("two", None, "Two", None, None, self.callback),
("shapes", None, "Shapes", None, None, None),
("triangle", None, "Triangle", None, None, self.callback),
("square", None, "Square", None, None, self.callback)
])
uimanager = Gtk.UIManager()
uimanager.insert_action_group(action_group)
uimanager.add_ui_from_string("""
<ui>
<menubar name='MenuBar'>
<menu name='default' action='numbers'>
<menuitem action='one' />
<menuitem action='two' />
</menu>
<menu action='shapes'>
<menuitem action='triangle' />
<menuitem action='square' />
</menu>
</menubar>
</ui>
""")
box = Gtk.Box();
menubar = uimanager.get_widget("/MenuBar")
box.pack_start(menubar, False, False, 0)
self.add(box)
item = Gtk.MenuItem()
item.set_label('Colours')
menu = Gtk.Menu()
self.menu = menu
item.set_submenu(menu)
menubar.append(item)
item = Gtk.MenuItem()
item.set_label('Red')
item.connect('activate',self.callback)
menu.append(item)
item = Gtk.MenuItem()
item.set_label('Blue')
item.connect('activate',self.callback)
menu.add(item)
# Bind hotkey
keystr = "Menu"
Keybinder.init()
Keybinder.bind(keystr, self.keybinder_callback, "Keystring %s (user data)" % keystr)
# For keybinder_callback
self.anchor = box # popup_at_widget
self.menubar = menubar
self.menu = uimanager.get_widget("/MenuBar/default")
def callback(self, obj):
print("You chose %s (%s)" % (obj.get_label(), type(obj)))
def keybinder_callback(self, keystr, user_data):
print("Handling", keystr, user_data)
print("Event time:", Keybinder.get_current_event_time())
#self.menu.popup(None,None,None,None,1,Keybinder.get_current_event_time())
#self.menu.popup_at_widget(self.anchor,Gdk.Gravity.SOUTH_WEST,Gdk.Gravity.NORTH_WEST,None)
self.menubar.select_item(self.menu)
MenuBar().show_all()
# Control-C termination https://bugzilla.gnome.org/show_bug.cgi?id=622084
from gi.repository import GLib
GLib.MainLoop().run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment