Hi,

Silly me! The solution is not to do any manual bindings and instead of
calling Menu.post() call Menu.tk_popup() and everything works:-)


On Thu, 21 Jun 2012 11:01:07 +0100
Mark Summerfield <l...@qtrac.plus.com> wrote:
> Hi,
> 
> I am trying to create a popup menu that works like a pulldown menu, that
> is, it:
>     (1) supports up and down arrow navigation and Enter to select,
>     (2) supports keyboard mnemonics (e.g., type 'b' to select Blue item),
>     (3) is cancelled with Escape.
> 
> Here is an example that doesn't support any of the above (yet all of the
> above work automatically for menus in a menu bar).
> 
> ############################################################
> # Adapted from
> # http://www.java2s.com/Code/Python/GUI-Tk/Popupmenudemonstration.htm
> from tkinter import *
> 
> class PopupMenuDemo(Frame):
>    def __init__(self):
>       Frame.__init__(self)
>       self.pack(expand=YES, fill=BOTH)
>       self.master.title("Popup Menu Demo")
>       self.master.geometry("300x200")
>       self.frame1 = Frame(self, bg="white")
>       self.frame1.pack(expand= YES, fill=BOTH)
>       self.popupMenu = Menu(self.frame1, tearoff=0)
>       self.popupMenu.bind("<q>", self.popupMenu.unpost) # Doesn't work
>       self.popupMenu.bind("<Escape>", self.popupMenu.unpost) # Doesn't
> work colors = ["White", "Red", "Green", "Blue"]
>       self.selectedColor = StringVar()
>       self.selectedColor.set(colors[0])
>       for color in colors:
>          self.popupMenu.add_radiobutton(label=color,
>             variable=self.selectedColor,
>             underline=0,
>             command=self.changeBackgroundColor)
>       self.frame1.bind("<Button-3>", self.popUpMenu)
> 
>    def popUpMenu(self, event):
>       self.popupMenu.post(event.x_root, event.y_root)
> 
>    def changeBackgroundColor(self):
>       self.frame1.config(bg=self.selectedColor.get())
>       
> PopupMenuDemo().mainloop()   
> ############################################################
> 
> Any advice on this would be appreciated:-)

-- 
Mark Summerfield, Qtrac Ltd, www.qtrac.eu
    C++, Python, Qt, PyQt - training and consultancy
        "Advanced Qt Programming" - ISBN 0321635906
            http://www.qtrac.eu/aqpbook.html
_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss

Reply via email to