bumblebee-status/util/popup.py

59 lines
1.5 KiB
Python
Raw Normal View History

2020-04-11 13:35:04 +02:00
"""Pop-up menus."""
import logging
try:
import Tkinter as tk
except ImportError:
# python 3
import tkinter as tk
import functools
2020-04-11 13:35:04 +02:00
class menu(object):
def __init__(self, parent=None, leave=True):
if not parent:
self._root = tk.Tk()
self._root.withdraw()
self._menu = tk.Menu(self._root, tearoff=0)
self._menu.bind("<FocusOut>", self._on_focus_out)
else:
self._root = parent.root()
self._root.withdraw()
self._menu = tk.Menu(self._root, tearoff=0)
self._menu.bind("<FocusOut>", self._on_focus_out)
if leave:
self._menu.bind("<Leave>", self._on_focus_out)
def root(self):
return self._root
def menu(self):
return self._menu
def _on_focus_out(self, event=None):
self._root.destroy()
def _on_click(self, callback):
self._root.destroy()
callback()
def add_cascade(self, menuitem, submenu):
self._menu.add_cascade(label=menuitem, menu=submenu.menu())
def add_menuitem(self, menuitem, callback):
self._menu.add_command(
label=menuitem, command=functools.partial(self._on_click, callback)
)
2020-04-11 13:35:04 +02:00
def show(self, event, offset_x=0, offset_y=0):
try:
self._menu.tk_popup(event["x"] + offset_x, event["y"] + offset_y)
2020-04-11 13:35:04 +02:00
finally:
self._menu.grab_release()
self._root.mainloop()
2020-04-11 13:35:04 +02:00
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4