added alternative bumblebee popup implementation
* the original implementation doesn't always generate click events. This new implementation fixes this issue. But as the old implementation is still in use (the bluetooth module makes use of it) and this implementation is probably not as matured as the old one, it was agreed to keep both the old and the new implementation until the bluetooth module has been migrated to the new implementatation.
This commit is contained in:
parent
315328b41f
commit
171bea4f6e
1 changed files with 38 additions and 0 deletions
38
bumblebee/popup_v2.py
Normal file
38
bumblebee/popup_v2.py
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
"""Pop-up menus."""
|
||||||
|
|
||||||
|
try:
|
||||||
|
import Tkinter as tk
|
||||||
|
except ImportError:
|
||||||
|
# python 3
|
||||||
|
try:
|
||||||
|
import tkinter as tk
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
import functools
|
||||||
|
|
||||||
|
|
||||||
|
class PopupMenu(object):
|
||||||
|
def __init__(self):
|
||||||
|
self._root = tk.Tk()
|
||||||
|
self._root.withdraw()
|
||||||
|
self._menu = tk.Menu(self._root)
|
||||||
|
self._menu.bind("<FocusOut>", self._on_focus_out)
|
||||||
|
|
||||||
|
def _on_focus_out(self, event=None):
|
||||||
|
self._root.destroy()
|
||||||
|
|
||||||
|
def _on_click(self, callback):
|
||||||
|
self._root.destroy()
|
||||||
|
callback()
|
||||||
|
|
||||||
|
|
||||||
|
def add_menuitem(self, menuitem, callback):
|
||||||
|
self._menu.add_command(label=menuitem, command=functools.partial(self._on_click, callback))
|
||||||
|
|
||||||
|
def show(self, event):
|
||||||
|
try:
|
||||||
|
self._menu.tk_popup(event['x'], event['y'])
|
||||||
|
finally:
|
||||||
|
self._menu.grab_release()
|
||||||
|
self._root.mainloop()
|
Loading…
Reference in a new issue