Hi --

I have two questions about popup menus. I've attached a small program that displays a TextView and brings up a popup menu when a mouse button is clicked on it.

Question 1: If I want to rebuild the Menu each time the button is clicked, and destroy it when I'm done with it, when am I supposed to call popupmenu.destroy()? The FAQ says to do it in the 'deactivate' callback (http://faq.pygtk.org/index.py?req=show&file=faq11.002.htp), but if I do that, then the MenuItems are destroyed before their 'activate' signals are emitted, which makes them more or less useless. Is the FAQ wrong, or am I missing something?

Question 2: If I *don't* destroy the Menu, then keypresses (not mouse button presses) in the TreeView cause the 'deactivate' and 'cancel' signals to be emitted from the Menu. This occurs on a Macbook Pro and a PowerBook G4 with pygtk 2.6.10, but not on Linux machines with pygtk 2.6.4 or 2.10.x. Is this a Mac bug? A pygtk 2.6 bug? Or am I doing something wrong again?

Here's my test code.  Any insight will be appreciated.

Thanks.
 -- Steve


import pygtk
pygtk.require('2.0')
import gtk
import gobject

def deactivate(menu):
    print "deactivate"
## menu.destroy() # This line prevents the 'activate' callback from being called!
def cancel(menu):
    print "cancel"
def activate(menuitem, itemname):
    print "activate", itemname

def popup(button, event):
    #global popupmenu
    popupmenu = gtk.Menu()
    popupmenu.set_screen(window.get_screen())
    popupmenu.connect('deactivate', deactivate)
    popupmenu.connect('cancel', cancel)
    for itemname in ("one", "two", "three"):
        menuitem = gtk.MenuItem(itemname)
        menuitem.connect('activate', activate, itemname)
        popupmenu.append(menuitem)
    popupmenu.show_all()
    popupmenu.popup(None, None, None, event.button, event.time)
    return True

if __name__ == '__main__':
    global window
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.connect('delete-event', gtk.main_quit)

    liststore = gtk.ListStore(gobject.TYPE_STRING)
    liststore.append(["hello"])
    liststore.append(["world"])
    treeview = gtk.TreeView(liststore)
    col = gtk.TreeViewColumn("header")
    cell = gtk.CellRendererText()
    col.pack_start(cell, True)
    col.add_attribute(cell, 'text', 0)
    treeview.append_column(col)

    window.add(treeview)
    treeview.connect('button-press-event', popup)
    window.show_all()
    gtk.main()



--
-- EMail: [EMAIL PROTECTED] Phone: (301) 975-5423 -- -- WWW: http://math.nist.gov/mcsd/Staff/SLanger/ Fax: (301) 975-3553 -- -- Mail: NIST; 100 Bureau Drive -- Stop 8910; Gaithersburg, Md 20899-8910 --

-- "I don't think this will work. That's why it's science." -- -- Naomi Langer (age 6), 17 Feb 2003 --


_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to