Pull to refresh

Gnome Applets. Введение

Reading time 5 min
Views 4.3K
Апплет — это небольшое приложение, которое интегрированно в Gnome панель и выполняет какие — либо поэтапные действия. В этой серии постов, я хочу рассказать как создаются эти самые gnome applets, от простого к чему-нибудь к более сложному и интересному. Для создания апплетов мы будем использовать PyGTK, но в принципе писать апплеты для Gnome можно и с помощью связки С + GTK+. Обычно апплет состоит из двух частей:- Описанние самого апплета и его действий на каком — либо языке программирования (в нашем случае python)- Файл описания мета-информации (файл с расширением .server, содержащий мета-информацию апплета)Перейдем к практике. Создадим для начала простейший апплет, который не будет нести никакой практической пользы, но с теоритической части важен, так как дает общие понятия о строении апплетов. Апплет будет представлять из себя простую кнопку, которую можно будет добавить на панель, нажать на эту кнопку, вот в принципе и весь функционал данного простого приложения, в следующих постах перейдем к более интересным, и главное полезным вещам.Создадим файл SimpleApplet.py в котором будет содержаться функционал нашего апплета. Код апплета:
Copy Source | Copy HTML<br/>#!/usr/bin/env python<br/> <br/>import pygtk<br/>import sys<br/>pygtk.require('2.0')<br/> <br/>import gnomeapplet<br/>import gtk<br/> <br/>def factory(applet, iid):<br/>    button = gtk.Button()<br/>    button.set_relief(gtk.RELIEF_NONE)<br/>    button.set_label("Simple Button")<br/>    button.connect("button_press_event", showMenu, applet)<br/>    applet.add(button)<br/>    applet.show_all()<br/>    return True<br/> <br/>def showMenu(widget, event, applet):<br/>    if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:<br/>        widget.emit_stop_by_name("button_press_event")<br/>        create_menu(applet)<br/> <br/>def create_menu(applet):<br/>    propxml="""<br/>            <popup name="button3"><br/>            <menuitem name="Item 3" verb="About" label="_About" pixtype="stock" pixname="gtk-about"/><br/>            </popup>"""<br/>    verbs = [("About", showAboutDialog)]<br/>    applet.setup_menu(propxml, verbs, None)<br/> <br/>def showAboutDialog(*arguments, **keywords):<br/>    pass<br/> <br/>if len(sys.argv) == 2:<br/>    if sys.argv[1] == "run-in-window":<br/>        mainWindow = gtk.Window(gtk.WINDOW_TOPLEVEL)<br/>        mainWindow.set_title("Ubuntu System Panel")<br/>        mainWindow.connect("destroy", gtk.main_quit)<br/>        applet = gnomeapplet.Applet()<br/>        factory(applet, None)<br/>        applet.reparent(mainWindow)<br/>        mainWindow.show_all()<br/>        gtk.main()<br/>        sys.exit()<br/> <br/>if __name__ == '__main__':<br/>    print "Starting factory"<br/>    gnomeapplet.bonobo_factory("OAFIID:Gnome_Panel_Example_Factory", gnomeapplet.Applet.__gtype__, "Simple gnome applet example", "1.0", factory)<br/> <br/>
Теперь что касается мета-информации нашего апплета. Создадим файл с расширением .server и назовем его SimpleApplet.server. Данный файл будет содержать в XML формате описание мета-информации нашего апплета (отображаемую иконку, путь к исполняемому .py файлу и др.) Для разных апплетов основной каркас .server остается неизменяемым. SimpleApplet.server:
Copy Source | Copy HTML<br/><oaf_info><br/><oaf_server iid="OAFIID:Gnome_Panel_Example_Factory" type="exe" location="/home/SimpleApplet.py"><br/><oaf_attribute name="repo_ids" type="stringv"><br/><item value="IDL:Bonobo/GenericFactory:1.0"/><br/><item value="IDL:Bonobo/Unknown:1.0"/><br/></oaf_attribute><br/><oaf_attribute name="name" type="string" value="Gnome Applet Example"/><br/><oaf_attribute name="description" type="string" value="Simple gnome applet example"/><br/></oaf_server><br/><oaf_server iid="OAFIID:Gnome_Panel_Example" type="factory" location="OAFIID:Gnome_Panel_Example_Factory"><br/><oaf_attribute name="repo_ids" type="stringv"><br/><item value="IDL:GNOME/Vertigo/PanelAppletShell:1.0"/><br/><item value="IDL:Bonobo/Control:1.0"/><br/><item value="IDL:Bonobo/Unknown:1.0"/><br/></oaf_attribute><br/><oaf_attribute name="name" type="string" value="Example"/><br/><oaf_attribute name="description" type="string" value="Simple gnome applet example"/><br/><oaf_attribute name="panel:category" type="string" value="Utility"/><br/><oaf_attribute name="panel:icon" type="string" value="computer.png"/><br/></oaf_server><br/></oaf_info> <br/>
Вот в принцепе и все. Наш апплет готов, он ничего не умеет делать, но его разработка дает общее представление об апплетах. Что бы добавить наш апплет на панель нужно проделать следующие действия:- Переместить файл SimpleApplet.server в каталог /usr/lib/bonobo/servers/- Сделать файл SimpleApplet.py исполняемым: chmod +x SimpleApplet.py — Добавить апплет на панель с помощью стандартного контекстного меню панелиВ итоге должен получится апплет в панели Gnome похожий на этот:image
Tags:
Hubs:
+22
Comments 15
Comments Comments 15

Articles