The submenu item does not call the function [with working solution]

    #submenu
    clearMenu = gtk.Menu()

    item = gtk.MenuItem("submenu item")
    item.connect("activate", lambda w: self.callBackFunction())
    clearMenu.append(item)
    item.show()


    '''TOP level'''
    menu = gtk.Menu()

    item = gtk.ImageMenuItem("Item1")
    img = gtk.Image()
    img.set_from_file('image1.png')
    item.set_image(img)
    menu.append(item)
    item.set_submenu(clearMenu) #attach submenu
    item.show()

    item = gtk.ImageMenuItem("Item2")
    img = gtk.Image()
    img.set_from_file('image2.png')
    item.set_image(img)   
    item.connect("activate", lambda w: self.callBackFunction())
    menu.append(item)
    item.show()

My top-level item2 item calls a specific callBackFunction function. But why is the "submenu item" not ? What am I doing wrong?


EDIT

Here's how I managed to get the submenu items to perform the desired action:

item.connect("button-press-event", self.callBackFunction, argument1, argument2)

But I still don’t understand why the “activate” event does not work on submenu items, but works in top-level menu items.

+3
source share
2 answers

This inherent problem with the focus submenu is explained here :

, , ( , .)

, , .

, .

, - "button-press-event", .

+4

"button-press-event" , :

(gPodder) commit a09b204a.

:

  • "activate" ( , )
  • "button-press-event" ( )
  • ( X-)
  • , ("activate" "button-press-event" )

1. 2. . 3. gobject.idle_add(). 4. a threading.Semaphore.

:

import threading
import gobject

def submenu_item_connect_hack(menu_item, callback, *args_for_callback):
    only_once = threading.Semaphore(1)

    def handle_event(item, event=None):
        if only_once.acquire(False):
            gobject.idle_add(callback, *args_for_callback)

    menu_item.connect('button-press-event', handle_event)
    menu_item.connect('activate', handle_event)

: :

item.connect("activate", lambda w: self.callBackFunction())
item.connect("button-press-event", self.callBackFunction, argument1, argument2)

:

submenu_item_connect_hack(item, self.callBackFunction, argument1, argument2)

, 695488 GNOME Bugzilla.

+4

All Articles