Totem Gnome Applet

    В предыдущем посте , я описывал создание простейшего апплета панели Gnome. В этом посте хотелось бы продемонстрировать апплет взаимодействующий с видеопроигрывателем Totem. Данный апплет будет представлять из себя небольшое приложение с 4 кнопками и надписью, у кнопок будет следующая функцианальность: воспроизведение, паузу, воспроизведение предыдущего и следующего.

    Код апплета:
    Copy Source | Copy HTML
    1. #!/usr/bin/env python
    2.  
    3. import sys
    4. import gtk
    5. import pygtk
    6. import subprocess
    7. import gnomeapplet
    8.  
    9. def factory(applet, iid):
    10.     button = gtk.Button("")
    11.     image = gtk.Image()
    12.     image.set_from_stock("gtk-media-previous",gtk.ICON_SIZE_BUTTON)
    13.     button.set_image(image)
    14.     button.connect("clicked",previous_clicked)
    15.     hbox.add(button)
    16.  
    17.     button = gtk.Button("")
    18.     image = gtk.Image()
    19.     image.set_from_stock("gtk-media-play",gtk.ICON_SIZE_BUTTON)
    20.     button.set_image(image)
    21.     button.connect("clicked",play_clicked)
    22.     hbox.add(button)
    23.  
    24.     button = gtk.Button("")
    25.     image = gtk.Image()
    26.     image.set_from_stock("gtk-media-pause",gtk.ICON_SIZE_BUTTON)
    27.     button.set_image(image)
    28.     button.connect("clicked",pause_clicked)
    29.     hbox.add(button)
    30.  
    31.     button = gtk.Button("")
    32.     image = gtk.Image()
    33.     image.set_from_stock("gtk-media-next",gtk.ICON_SIZE_BUTTON)
    34.     button.set_image(image)
    35.     button.connect("clicked",next_clicked)
    36.     hbox.add(button)
    37.  
    38.     hbox = gtk.HBox()
    39.     label = gtk.Label("Gnome player:")
    40.     hbox.add(label)
    41.  
    42.     applet.add(hbox)
    43.     applet.show_all()
    44.     return True
    45.  
    46. def previous_clicked(event):
    47.     subprocess.Popen(("totem","--previous"))
    48.  
    49. def play_clicked(event):
    50.     subprocess.Popen(("totem","--play"))
    51.  
    52. def pause_clicked(event):
    53.     subprocess.Popen(("totem","--pause"))
    54.  
    55. def next_clicked(event):
    56.     subprocess.Popen(("totem","--next"))
    57.  
    58. if len(sys.argv) == 2:
    59.     if sys.argv[1] == "run-in-window":
    60.         main_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    61.         main_window.set_title("Totem Applet")
    62.         main_window.connect("destroy", gtk.main_quit)
    63.         app = gnomeapplet.Applet()
    64.         factory(app, None)
    65.         app.reparent(main_window)
    66.         main_window.show_all()
    67.         gtk.main()
    68.         sys.exit()
    69.  
    70. gnomeapplet.bonobo_factory("OAFIID:GNOME_TotemApplet_Factory",
    71.                                      gnomeapplet.Applet.__gtype__,
    72.                                      "simple remote control", "1.0", factory)

    Здесь у нас контейнером всех элементов выступает элемент — HBox, содержащий в себе надпись label, и 4 кнопки — button — воспроизведение, пауза и т.д. За описанием контейнера идет описание 4-ех событий — нажатия на наши кнопки, описание окна, и непосредственно регистрация нашего апплета.
    Файл .server:
    Copy Source | Copy HTML
    1. <oaf_info>
    2.        <oaf_server iid="OAFIID:GNOME_TotemApplet_Factory"
    3.                    type="exe" location="/home/totemapplet.py">
    4.  
    5.                <oaf_attribute name="repo_ids" type="stringv">
    6.                        <item value="IDL:Bonobo/GenericFactory:1.0"/>
    7.                        <item value="IDL:Bonobo/Unknown:1.0"/>
    8.                </oaf_attribute>
    9.                <oaf_attribute name="name" type="string" value="Totem Applet"/>
    10.                <oaf_attribute name="description" type="string" value="Simple remote control"/>
    11.        </oaf_server>
    12.  
    13.        <oaf_server iid="OAFIID:GNOME_TotemApplet"
    14.                    type="factory" location="OAFIID:GNOME_TotemApplet_Factory">
    15.  
    16.                <oaf_attribute name="repo_ids" type="stringv">
    17.                        <item value="IDL:GNOME/Vertigo/PanelAppletShell:1.0"/>
    18.                        <item value="IDL:Bonobo/Control:1.0"/>
    19.                        <item value="IDL:Bonobo/Unknown:1.0"/>
    20.                </oaf_attribute>
    21.                <oaf_attribute name="name" type="string" value="Totem Applet"/>
    22.                <oaf_attribute name="description" type="string" value="Simple remote control"/>
    23.                <oaf_attribute name="panel:category" type="string" value="Utility"/>
    24.        </oaf_server>
    25.        </oaf_info>

    После того как проделано вышеописанное, нужно проделать следующие:
    Копируем файл .server в /usr/lib/bonobo/servers/: cp /home/totemapplet.server /usr/lib/bonobo/servers/
    Делаем наш апплет иполняемым: chmod +x totemapplet.py
    Добавляем на панель и наслаждаемся.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 3
    • 0
      А как добавить на панель если в списке оно не появилось?
      • 0
        Должно появится. Проверьте пути до .py файла в totemapplet.server
      • 0
        у меня вот вопрос: как дебажить апплет если он не хочет встраиваться в панель но прекрасно запускается в окне?
        а то ошибка: «Возникла проблема при загрузке апплета «OAFIID:GNOME_MyApplet» скажем так не особо информативна :(

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.