[util/popup] add docstrings
This commit is contained in:
parent
bc382e67d3
commit
1b53e7ecf2
1 changed files with 42 additions and 11 deletions
|
@ -2,51 +2,82 @@
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
try:
|
import tkinter as tk
|
||||||
import Tkinter as tk
|
|
||||||
except ImportError:
|
|
||||||
# python 3
|
|
||||||
import tkinter as tk
|
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
|
|
||||||
class menu(object):
|
class menu(object):
|
||||||
|
"""Draws a hierarchical popup menu
|
||||||
|
|
||||||
|
:param parent: If given, this menu is a leave of the "parent" menu
|
||||||
|
:param leave: If set to True, close this menu when mouse leaves the area (defaults to True)
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, parent=None, leave=True):
|
def __init__(self, parent=None, leave=True):
|
||||||
if not parent:
|
if not parent:
|
||||||
self._root = tk.Tk()
|
self._root = tk.Tk()
|
||||||
self._root.withdraw()
|
self._root.withdraw()
|
||||||
self._menu = tk.Menu(self._root, tearoff=0)
|
self._menu = tk.Menu(self._root, tearoff=0)
|
||||||
self._menu.bind("<FocusOut>", self._on_focus_out)
|
self._menu.bind("<FocusOut>", self.__on_focus_out)
|
||||||
else:
|
else:
|
||||||
self._root = parent.root()
|
self._root = parent.root()
|
||||||
self._root.withdraw()
|
self._root.withdraw()
|
||||||
self._menu = tk.Menu(self._root, tearoff=0)
|
self._menu = tk.Menu(self._root, tearoff=0)
|
||||||
self._menu.bind("<FocusOut>", self._on_focus_out)
|
self._menu.bind("<FocusOut>", self.__on_focus_out)
|
||||||
if leave:
|
if leave:
|
||||||
self._menu.bind("<Leave>", self._on_focus_out)
|
self._menu.bind("<Leave>", self.__on_focus_out)
|
||||||
|
|
||||||
|
"""Returns the root node of this menu
|
||||||
|
|
||||||
|
:return: root node
|
||||||
|
"""
|
||||||
|
|
||||||
def root(self):
|
def root(self):
|
||||||
return self._root
|
return self._root
|
||||||
|
|
||||||
|
"""Returns the menu
|
||||||
|
|
||||||
|
:return: menu
|
||||||
|
"""
|
||||||
|
|
||||||
def menu(self):
|
def menu(self):
|
||||||
return self._menu
|
return self._menu
|
||||||
|
|
||||||
def _on_focus_out(self, event=None):
|
def __on_focus_out(self, event=None):
|
||||||
self._root.destroy()
|
self._root.destroy()
|
||||||
|
|
||||||
def _on_click(self, callback):
|
def __on_click(self, callback):
|
||||||
self._root.destroy()
|
self._root.destroy()
|
||||||
callback()
|
callback()
|
||||||
|
|
||||||
|
"""Adds a cascading submenu to the current menu
|
||||||
|
|
||||||
|
:param menuitem: label to display for the submenu
|
||||||
|
:param submenu: submenu to show
|
||||||
|
"""
|
||||||
|
|
||||||
def add_cascade(self, menuitem, submenu):
|
def add_cascade(self, menuitem, submenu):
|
||||||
self._menu.add_cascade(label=menuitem, menu=submenu.menu())
|
self._menu.add_cascade(label=menuitem, menu=submenu.menu())
|
||||||
|
|
||||||
|
"""Adds an item to the current menu
|
||||||
|
|
||||||
|
:param menuitem: label to display for the entry
|
||||||
|
:param callback: method to invoke on click
|
||||||
|
"""
|
||||||
|
|
||||||
def add_menuitem(self, menuitem, callback):
|
def add_menuitem(self, menuitem, callback):
|
||||||
self._menu.add_command(
|
self._menu.add_command(
|
||||||
label=menuitem, command=functools.partial(self._on_click, callback)
|
label=menuitem, command=functools.partial(self.__on_click, callback)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
"""Shows this menu
|
||||||
|
|
||||||
|
:param event: i3wm event that triggered the menu (dict that contains "x" and "y" fields)
|
||||||
|
:param offset_x: x-axis offset from mouse position for the menu (defaults to 0)
|
||||||
|
:param offset_y: y-axis offset from mouse position for the menu (defaults to 0)
|
||||||
|
"""
|
||||||
|
|
||||||
def show(self, event, offset_x=0, offset_y=0):
|
def show(self, event, offset_x=0, offset_y=0):
|
||||||
try:
|
try:
|
||||||
self._menu.tk_popup(event["x"] + offset_x, event["y"] + offset_y)
|
self._menu.tk_popup(event["x"] + offset_x, event["y"] + offset_y)
|
||||||
|
|
Loading…
Reference in a new issue