Элементы подменю в контекстном меню Nautilus - PullRequest
3 голосов
/ 04 декабря 2009

Я пытаюсь написать расширение для nautilus, которое добавляет элемент в меню, которое появляется при щелчке правой кнопкой мыши по файлу (как показано на рисунке)

alt text

Однако я хотел бы добавить подменю к своему элементу пользовательского меню.

Я скачал пакет 'nautilus-python', который включает примеры того, как писать расширения для Nautilus (и пока что это была лучшая / единственная документация, которую я нашел). В нем есть файл с именем submenu.py, который содержит следующее:

import nautilus

class ExampleMenuProvider(nautilus.MenuProvider):

    def get_file_items(self, window, files):
        menuitem = nautilus.MenuItem('ExampleMenuProvider::Foo', 'Foo', '')

        submenu = nautilus.Menu()
        menuitem.set_submenu(submenu)

        menuitem = nautilus.MenuItem('ExampleMenuProvider::Bar','Bar','')
        submenu.append_item(menuitem)

        return menuitem,

    # FIXME: Why isn't this working?
    def get_background_items(self, window, file):
        submenu = nautilus.Menu()
        submenu.append_item(nautilus.MenuItem('ExampleMenuProvider::Bar', 'Bar', ''))

        menuitem = nautilus.MenuItem('ExampleMenuProvider::Foo', 'Foo', '')
        menuitem.set_submenu(submenu)

        return menuitem,

ps: я не добавил «# FIX ME: Почему это не работает?». что на самом деле включено в пример

Код не работает. Даже если я уберу вторую функцию и оставлю только первую, она не сработает.

Любая помощь будет оценена, спасибо.

1 Ответ

3 голосов
/ 04 декабря 2009

Я нашел решение.

  1. вам нужна объявленная функция init .
  2. пришлось изменить имя переменной в приведенном выше примере

    import nautilus
    
    class ExampleMenuProvider(nautilus.MenuProvider):
        def __init__(self):
            pass
    
        def get_file_items(self, window, files):
            submenu = nautilus.Menu()
    
            item = nautilus.MenuItem('Nautilus::sbi','Nau-T','image')
            item.set_submenu(submenu)
    
            item_two = nautilus.MenuItem('Nautilus::s','www','image')
            submenu.append_item(item_two)
    
            return item,
    
...