03 июля | 2024г. | 06:16:35


АвторТема: Пишем плагин сами или случайные уроки по python  (Прочитано 83298 раз)

0 Пользователей и 2 Гостей смотрят эту тему.

Оффлайн ака УчкунАвтор темы

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Прежде чем разработаем последние две функции класса, сначала в предыдущем коде внесем маленькое дополнение.
В функции action, в ветке сохранения настроек(когда ранее сохраненного файла не оказалось), мы просто сохранили настройки. А нужно бы по логике вещей выдать сообщение, чтобы пользователь понял, что настройки успешно сохранились. Поэтому в той части кода, сразу за cохранением настроек исходя из логики добавим вывод сообщения, что настройки успешно сохранены, то есть вот так:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.И весь код приобретает вид:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.



               
Последние две функции нашего класса.
self.saveset это просто сохранение настроек (после подтверждения о перезаписи существующего файла):

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.         
Это тот самый код для сохранения, уже разбирали по буквочкам. Здесь у функции присутствует аргумент answer и соответственно код выполнится, если if answer is True:, то есть при получении положительного ответа....

И последняя функция нашего класса self.restoreset, которая будет задействована после того, как пользователь нажал ОК в пункте сохранения настроек и подтвердил затем сохранение.
Наконец-то именно здесь применим тот код для сохранения, который разрабатывали в самом начале, вот так:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.         

Это тот самый код, что разрабатывали в самом начале урока, за исключением пути сохранения
файла настроек (если помните тогда мы сохраняли временно в папку темп).

Здесь остается только добавить запуск скрипта с восстановлением настроек.
Напомню текст скрипта:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Сохраним этот скрипт в папку с плагином, создав для этого отдельную папку script, и назвав скажем файл скрипта 'restore_settings.sh'.

В таком разе код запуска скрипта будет выглядеть так:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Соответственно функция restoreset примет вид:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.         
         
Код класса в плагине(то есть меню плагина, со всеми действиями с этим меню) полностью готов.
А ведь мы создали целый модуль собственный! И причем абсолютно рабочий.....
Вот он:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
         
И осталось дело за совсем малым, написать код вызова плагина и если нужно добавить локализацию
для менюшек и сообщений нашего плага.

Вызов плагина. Тут очень просто.
Тоже ничего придумывать питоновского вобщем-то не надо.
Об этом тоже позаботились создатели имиджей.

В самом конце нашего кода, после тела класса NimSettings создаем функцию Plugins, который в качестве аргументов будет ожидать аргументы словарного типа (то бишь **kwargs), эта функция будет возвращать модуль PluginDescriptor, аргументы для которой мы придумаем.

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Сам модуль PluginDescriptor импортируем из файла Plugin.py из папки Plugins

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Открываем этот самый Plugin.py и изучаем какие же аргументы нужно передать этому самому модулю PluginDescriptor, для этого достаточно просмотреть аргументы его инструкции __init__
Вот эти аргументы:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Рассмотрим по одной.
а) name = "Plugin"  #название плагина, у нас будет name = "Restore Tuner settings"
б) where = [ ]  # в каком меню показать плагин, нам достаточно показать в списке плагинов, запишем where = [PluginDescriptor.WHERE_PLUGINMENU]
в) description = ""   #  описание плагина, запишем description = "Plugin for save Tuner settings"
г) icon = None  # пропустим, так как у нас нет собственной иконки для плага
д) fnc = None  # собственно что нужно задействовать при выборе плагина, запишем функцию, которую назовем произвольно, например fnc = main
е) остальные атрибуты оставляем по умолчанию....

Впишем эти аргументы нами придуманные в функцию вызова плагина, добавив при необходимости скобки с нижним подчеркиванием для переводимости
при необходимости:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.   
   
И до этой функции предпоследним напишем функцию main, которая просто при выборе строчки с плагином (в списке плагинов)
и запустит наш класс NimSettings:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.   
   
Все. Наш плагин готов в принципе к использованию.
Осталось только два нюанса.
Первый.
Если мы хотим, чтобы плагин был русскоязычным, нужно заложить в плагин локализуемость и добавить файлы локализации.
Сильно углубляться тут в код не буду. В этом случае-то всегда можете использовать готовый шаблон, да и код достаточно прост.

Для создания переводимости меню и сообщений плагина (кроме тех скобок и нижнего подчеркивания, что мы уже добавляли в плагин)
нужно для начала импортировать

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Затем в самом начале кода плагина тоже (сразу за импортами) прописать вот такой простой код

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.

Если хотите разобрать этот код по буквочкам, изучаем gettext.py, Language.py и os.py (в имидже).
А так понятно "NimSettings" - это так мы назовем файл локализации для плагина, который будет находится,
как и указано в этом коде    Extensions/TunerSettingsRestore/locale/   

А сам файл локализации будем создавать лучше и быстрей всего из готового шаблона.
Создайте себе шаблон например взяв айл локали вашего другого плагина, и просто изменив название
создавать новый файл локали.
К файлам локали (po и mo) тоже есть свои требования, объяснять их не задача нашей темы.   


Вот теперь код, который получился у нас окончательно. Наш plugin.py

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
   
Спойлер   :
Кстати как закончите код, в окне Geany в верхней панельке сразу нажмите "Скомпилировать",
это еще один способ выявить ошибки в коде. А ошибки неизбежны, в основном конечно из-за
невнимательности. Я вот например уже нашел таковые ошибки в предыдущих постах и уже исправил там....

Файл локали тоже скажем создали.
Остался последний нюанс.
Файл __init__.py в папке плагина.
Смысл этого файла:
а) присутствие этого файла нужно, если из этой директории (то есть из папки плагина) потребуется импорт
какого-то модуля. Например, если ваш плагин будет состоять из нескольких файлов-модулей (пакетов).
б) если заведомо нужно объявлять атрибуты для этой директории. В нашем случае не нужно.

Потому оставляем просто пустой (все равно униксовый должен быть, хоть и пустой) файл __init__.py


Вот теперь все.
Наш плагин полностью готов.
Наверно вместе со мной создавали параллельно файлы плагина?

Вот такая папка с файлами плагина должна была получиться, которую в архиве приложил.
Забрасываем эту папку в имидж по пути

/usr/lib/enigma2/python/Plugins/Extensions/

Перегружаемся.
И заходя в меню списка плагинов, видим наш плагин














Поздравляю
Вы вместе со мной написали свой первый рабочий плагин!
         
А если серъезно, достиг ли я цели, которую поставил перед написанием плагина публично?
Целью была показать новичкам изучающим питон, как нудную зубрежку питона можно и нужно применить в плагиностроении.
Если бы например когда я только начал изучать питон, набрел бы на такой ФАК, как бы я сэкономил свое время....
А может кого-то и подстегну к плагиностроению и в нашем полку плагинописателей прибудет возможно?

Надеюсь кому-то помог.....



  • vu+ultimo 9995
Мои авторские работы  нельзя редактировать для выкладывания на паблик.
Но их можно выкладывать неизмененными на любых ресурсах с указанием авторства
Мои кошельки:
WMZ     Z356196865451 WMR     R105983132832

Теги:
 

Похожие темы

  Тема / Автор Ответов Последний ответ
9 Ответов
16062 Просмотров
Последний ответ 14 февраля | 2019г. | 10:01:39
от drakon71
27 Ответов
25737 Просмотров
Последний ответ 04 апреля | 2022г. | 06:06:17
от тихон
1 Ответов
9246 Просмотров
Последний ответ 20 марта | 2014г. | 00:40:50
от Taapat
0 Ответов
3469 Просмотров
Последний ответ 07 апреля | 2014г. | 00:52:47
от 2boom
4 Ответов
4844 Просмотров
Последний ответ 03 апреля | 2016г. | 16:49:33
от Corwin



X

Добро пожаловать!

Мы заметили, что у Вас установлено расширение AdBlock или ему подобное. Пожалуйста добавьте наш Клуб в белый список, внесите этим посильную лепту в его развитие. Спасибо!