Част 1. Въведение в библиотеката на скринетите

Използване на Python и Screenlets за създаване на полезни настолни приложения на Linux

компютри

Серия съдържание:

Това съдържание е част 1 от # от поредицата: Скриптове за настолни компютри на Linux.

Това съдържание е част 1 от 2 от поредицата: Скриптове за настолни компютри на Linux.

Следете за още статии от тази поредица.

Обикновено GUI рамка от някакъв вид се използва като основа за разработване на приложения за работния плот на Linux. Работният плот на GNOME обикновено използва библиотеката GTK +, а KDE (K Desktop Environment) използва Qt библиотеката. И двете платформи съдържат цялата функционалност, необходима за разработване на GUI приложения, включително библиотеки и инструменти за проектиране на прозорци на приложения, които потребителите да използват. Тази статия ви показва как да използвате набор от скрийнлети (вижте Ресурси за връзка) за разработване на приложения, които ефективно взаимодействат с работния плот на Linux.

Списъкът с приложения за подобряване на ефективността при използване на работния плот включва програми като GNOME Do и Tomboy. Обикновено потребителите могат да използват тези приложения директно от работния плот, като използват специална клавишна комбинация или плъзгане и пускане от други приложения като Mozilla Firefox. Tomboy работи като инструмент за водене на бележки на работния плот и има способността да извлича текст от други прозорци.

Първи стъпки със скрилети

За да започнете да разработвате скрилети, трябва да инсталирате няколко компонента. Първо ще трябва да инсталирате пакета на скрийнлетите, като използвате Центъра за управление на софтуера на Ubuntu или директно от командния ред. За да изтеглите необходимия пакет в полето Търсене въведете скрилети в прозореца на контролния център на софтуера. Резултатите от търсенето ще имат две опции: инсталирайте основния пакет или инсталирайте само документацията на скрийнлета.

Python и Ubuntu

Използваме Python за разработване на скрийнлети. Стандартната инсталация на Ubuntu 10.04 вече има Python 2.6, тъй като голям брой помощни програми зависят от нея. Въпреки това, в зависимост от изискванията на приложението, може да са необходими допълнителни библиотеки. Всички примери, предоставени в тази статия, са разработени и тествани на Ubuntu 10.04.

След като изпълните тези стъпки, трябва да изтеглите изходния код за тестовите скрилети от уебсайта screenlets.org. Тестовият екран е в папката src/share/screenlets/Test и използва библиотеките Cairo и GTK, които също ще трябва да бъдат инсталирани. Структурата на стандартен скрийнлет може да бъде проучена на примера на тестова програма, чийто изходен код е във файла TestScreenlet.py.

Python е обектно-ориентиран език за програмиране на високо ниво, така че използва ключовата дума class за дефиниране на обекти. В показания пример класът се нарича TestScreenlet и той дефинира няколко метода. На ред 42 във файла TestScreenlet.py съдържа следния код:

Създаване на обикновен скрийнлет

Основните компоненти на скрийнлета са файлът с икони, изходният файл и директорията теми. Тази директория съдържа допълнителни директории с различни стилове на показване (или теми). Можете да изтеглите стандартен шаблон за скрийнлет от уебсайта screenlets.org с всички необходими файлове и директории.

Първият скрийнлет, базиран на този шаблон, ще бъде стандартно приложение "Hello World". Изходният код за екрана "Hello World" е показан в Листинг 1.

Листинг 1. Python код за екрана Hello World

Всяко приложение трябва да импортира библиотеката на скрийнлетите и да създаде нова сесия. Има и други предпоставки, включително стъпки за инициализация и основна функция за изтегляне за показване на приспособлението на екрана. В примера TestScreenlet.py има метод __init__, който инициализира обекта. Този метод съдържа един израз, който извиква метода __init__ screenlet'a, който задава началните стойности за височината и ширината на прозореца, създаден за това приложение.

Втората функция, необходима за работа на приложението, е методът on_draw. Тази процедура задава цвета на фона на правоъгълника на бял и го показва в предварително определен размер. След това този метод задава цвета на шрифта на черен и инициализира текста на "Hello World", който след това се изобразява в прозореца на приложението. Фигура 1 показва резултата от стартирането на този скрийнлет. Тази стандартна структура ще бъде използвана по-късно в тази статия като отправна точка за създаване на по-сложни приложения.

Фигура 1. Пример за обикновен скрийнлет

Повторно използване на код в по-сложен скрийнлет

Полезна функция при разработването на скрилети е възможността да се използва код от други приложения. Повторната употреба предоставя допълнителни възможности, като отваря достъп до много съществуващи проекти с отворен код на Python. Всички екрани имат една и съща начална структура, но могат да съдържат допълнителни методи за поддържане на различна функционалност. Листинг 2 показва примерно приложение TimeTrackerScreenlet.

Листинг 2. Изходен код на TimeTrackerScreenlet

Този пример въвежда няколко нови концепции, които ще трябва да знаете, за да разработите високо функционални приложения. Всички екрани могат да реагират на определени действия или събития на потребителя, като щракване върху бутони на мишката или преместване на обекти на екрана. Този пример използва събитието за натискане на бутона на мишката като спусък за промяна на състоянието на иконата. Когато екранът стартира, се показва иконата start.png. Когато кликнете върху изображението, то се променя на stop.png, и началният час се записва в полето за самостоятелно стартиране. Когато кликнете върху изображението отново, то се променя обратно на start.png, и прозорецът на приложението показва времето, изминало от първото щракване.

Обработката на събития е друга ключова характеристика на скринетите, която прави възможно разработването на разнообразни приложения. Въпреки че този пример използва само събитието mouse_down, този подход може да се приложи към други събития, генерирани от рамката на скрийнлета или системни събития като таймери. Друга идея, представена в този пример, е постоянното състояние. Тъй като приложението работи постоянно, в очакване на дадено събитие да активира определено действие, то може да съхранява информация в паметта, например времето на първото щракване върху иконата. Също така, ако е необходимо, можете да запазите информация на диск за по-късна употреба.

Автоматизиране на задачи със скрилети

След като се запознаете с основните характеристики на скринетите, е време да преминете към практическото им приложение. Днес повечето потребители използват RSS емисии, за да четат блогове или новини от интерес. Като друг пример ще бъде разработен персонализиран скрийнлет, който следи конкретни RSS емисии за ключови думи и показва резултатите в текстово поле. Тези резултати ще бъдат кликващи връзки, които ще отворят съответното съдържание в уеб браузър. Листинг 3 показва изходния код за "RSS Search" -screenlet'a.

Листинг 3. Изходният код на Screenlet за работа с RSS емисии

В допълнение към фрагментите, които вече са познати от първите два екрана, този пример съдържа и нови идеи, включително страница за конфигуриране. Процедурата on_init добавя три опции, които трябва да бъдат зададени от потребителя: списъкът на наблюдаваните RSS емисии, темата, която трябва да се търси, и периодът на актуализация. Зададените стойности се използват от подпрограмата за актуализиране по време на изпълнение.

Езикът Python е идеален за решаване на подобни проблеми. Стандартната библиотека включва всичко необходимо за зареждане на XML данни от RSS емисия в списък за по-нататъшно търсене. В Python това отнема само три реда код:

Това създава списък с обекти, които съответстват на отделни XML елементи с име елемент. Сега можете да преминете през този списък в търсене на интересуваща тема. Python осигурява елегантен начин за итерация през списък с елементи с помощта на цикъл for, както е показано по-долу:

Всеки елемент, отговарящ на критериите за търсене, се добавя към списъка за показване, свързан с този екземпляр на скрийнлета. Този подход ви позволява да имате няколко екземпляра на скрийнлет, работещи едновременно, всеки от които търси различна тема. Последната част на функцията за актуализиране прерисува текста в списъка за актуализиране и стартира нов таймер за актуализация, използвайки периода за актуализация, посочен на страницата за конфигуриране По подразбиране таймерът работи на всеки 10 секунди, но тази стойност може да бъде променена на всяка друга. Механизмът за стартиране на таймерите е взет от библиотеката gobject, включена в рамката на GTK.

За да се отговори на посочените изисквания, беше необходимо значително да се увеличи функционалността на метода on_draw в това приложение. И двете библиотеки - Кайро и Панго - ви позволяват да добавяте специфични ефекти към текстовия прозорец. Така че, използването на градиентно запълване на фона ви позволява да създадете „стилна“ визуална презентация със заоблени ъгли и полупрозрачност. С Pango можете да добавите няколко функции към мениджъра на графичния интерфейс, за да запазите и възстановите текущия контекст. Тази библиотека също така предоставя начин за създаване на мащабируеми шрифтове въз основа на текущия размер на екрана.

Фигура 2. Пример за скрийнлет

настолни

linux

Заключение

Python и скрийнлетите улесняват създаването на полезни десктоп приложения. Може би най-трудното нещо за научаване е API на скрийнлета и прехвърлянето на контрол между различните функции. Въпреки че свързаната с тях документация не е най-удобният източник на информация, тя съдържа цялата информация, необходима за използването на различните функции. Може би е по-добре да преминете направо към практически експерименти, като модифицирате готовите екрани, за да отговарят на вашите нужди.

Изтеглете ресурси

Свързани теми

  • Скриптиране на работния плот на Linux, Част 1: Основи: оригинална статия (EN).
  • GTK + набор от инструменти за прозорци за GNOME: Начална страница на библиотеката на GTK UI+.
  • Набор инструменти за прозорци на Qt за KDE: Начална страница на библиотеката на Qt UI.
  • Уебсайт за скрилети: начална страница на технологията за скрилети с примери и шаблони за екрани и цялата необходима документация.
  • Python.org: Основният източник на информация за Python.
  • Следвайте developerWorks в Twitter или се абонирайте за tweet на developerWorks Linux.

Коментари