05 ноября | 2024г. | 06:37:29


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

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

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

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
такой

Что и требовалось доказать.
Где ты видишь точку в названии папки?
Исправь в переменной path название папки и ошибка пропадет.



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

Оффлайн gorr

  • Младший Джедай
  • **
  • Сообщений: 102
  • Поблагодарили: 233
  • Уважение: +2
все ок
компиляция прошла без ошибок
вопросы буду задавать по мере их не решения (у меня)
думаю может модераторы удалят "мусор" последних сообщений- или это делает сам автор?

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

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
.......
Вообще идея была отображения сколько раз включались каналы.
........

Разработав работающий алгоритм, строго следуя ему, выполнил то, что ты хотел.
То есть разработал окно статистики, где показывается сколько раз переключались каналы.
Вот смотри.
Идея о том, что нужно использовать встроенный в либах модуль collections  была правильная.
Единственное, когда собираешься использовать готовый модуль (неважно откуда, из либов питона, из имиджа.....), в первую очередь необходимо тщательно изучить этот модуль.
Как он работает, что и в каком виде он выдает и так далее.
Пришлось потратить на изучение этого модуля несколько вечеров.

А затем также используя возможности плагина ZapStatistic, написал вот вполне рабочий код, который и выводит статистику, сколько раз на какой канал переключались.

Вот он. Можно оформить и в виде отдельного плагина, добавив вызов и возможно локаль......


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

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Во-первых раз файл zapstastistic.xml, откуда и хотим черпать информацию, является файлом хмл, из этого и исходить, и нужно было обрабатывать его не как текстовый файл, а именно хмл и парсить его с помощью встроенного парсера.
А далее используя-таки (как у тебя и было) функцию most_common модуля Counter из collections подсчитать количество совпадений по референсу канала.
И так как изучение модуля collections показало что мы получаем список из кортежей, с двумя элемеентами в каждом кортеже, первый референс, второй количество. Ну и конечно метод repr (который переводит кортеж в строку) использовать нельзя было.
Соответственно этот код:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.Из первого элемента по референсу определяет имя канала, и получаем новый список, опять таки из кортежей с двумя элементами, но теперь уже первый элемент не референс, а имя канала.

Ну и передать это дело конструктору мультиконтент это уже дело техники.....

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


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

Оффлайн gorr

  • Младший Джедай
  • **
  • Сообщений: 102
  • Поблагодарили: 233
  • Уважение: +2
Вопрос к мастеру (автору)

При импорте  модуля   ActionMap в качестве аргументов передаются:
контексты кеймапа (contextc[]) - понятно
actions{} - словарный аргумент используемых "действий" (используемых кнопок пульта)  - понятно
и аргумент prio - не понятно
Судя по названию  он отвечает за приоритетность
Если можете - поясните пожалуйста его назначение (важность) и когда его нужно применять
к примеру

self["actions"] = ActionMap(["SetupAction"],
         {
            "cancel": self.consel,
            "left": self.left,
            "right": self.right,
            "up": self.up,
            "down": self.down,
            "blue": self.PicSetupMenu,
            "ok": self.go
         }, -2)

и еще
что касается метода __init__ 
в нашем примере:

class NimSettings(Screen):
    def __init__(self, session):

в самом классе Screen -
def __init__(self, session, parent = None):

или встречается так:
def __init__(self, session, arg = 0):

можно ли пояснить назначение и использование третьего аргумента (parent или arg)

судя по названию parent - аргумент отвечающий за "родительскую связь"

спасибо

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

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
........
можно ли пояснить назначение и использование третьего аргумента (parent или arg)
.......

Назначение и использование это нужно выяснять в самом классе, где и применен этот аргумент.
Дальнейший код в том самом классе тебе и подскажет назначение и использование этого и любого другого аргумента.
Сейчас к сожалению нет времени, чтобы открыть, изучит этот модуль, да и подробно и конкретно уже пояснить для чего там этот аргумент, но думаю мыслишь правильно. Скорее всего аргумент parent там судя по названию именно про родительский контроль.

А насчет того, что почему я в коде инициирую класс с помощью двух аргументов, а в самом классе инит с тремя аргументами, просто не нужен был мне третий аргумент, к моему-то окну ни к чему родит. контроль.
Можно было и так вызвать класс:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.То есть прямо говорим имиджу, что parent нам не треба. Результат был бы тот же. И код тоже рабочий.
Но зачем? Если уже в самом классе значение по умолчанию равно "нулю". Зачем еще раз подтверждать это значение?

Вобщем, аргументы, которым уже присвоены значения по умолчанию, если эти значения по умолчанию вас устраивают, можно не указывать при вызове класса.

Что касается аргумента arg из второго твоего примера, точно также в самом классе, где применен этот аргумент, в дальнейшем коде этого класса и поймешь, для чего этот аргумент.

И еще в связи с этим хочу сказать.
Новичок, только изучающий питон, почему-то думает, например по этому примеру, что если в классе аргументы self и session, то значит и вызывать надо класс именно с этими названиями аргументов. Ничего подобного. Да вызывайте хоть назвав аргументы наоборот notself и notsession, главное ЧТО передадите в качестве аргумента, а не название.
Например в классе есть аргумент, скажем с названием alfa, который является списком, а вы с тем же названием передаете аргумент типа строка. Разумеется возникнет ошибка. Имидж вам скажет ТИП АРГУМЕНТА НЕВЕРЕН. А вот если передадите с тем же названием или с любым другим названием правильный тип-список, код будет рабочий. Питону до лампочки как вы назвали аргумент, главное чтобы тип был верный.......

Именно поэтому пусть вас не обманывает название аргумента arg или nearg, вполне может быть название противоречит смыслу. Ведь название зависит от фантазии автора. Хотя конечно в питоне негласным правилом является именно присваивание названий по смыслу.

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

Оффлайн gorr

  • Младший Джедай
  • **
  • Сообщений: 102
  • Поблагодарили: 233
  • Уважение: +2
спасибо
по второй части вроде понятно
но вопрос по ActionMap  -
self["actions"] = ActionMap(["SetupAction"],
         {
            "cancel": self.consel,
            "left": self.left,
            "right": self.right,
            "up": self.up,
            "down": self.down,
            "blue": self.PicSetupMenu,
            "ok": self.go
         }, -2)

если можно - поясните

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

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
.....вопрос по ActionMap  -
self["actions"] = ActionMap(["SetupAction"],
        ........
         }, -2)

если можно - поясните

Не смогу детально и точно ответить на этот вопрос, поэтому не ответил.
В свое время не нашел (может плохо искал?) в документации про акшинмап и естественно в таких случаях домыслываю по логике сам. По моему домыслу это приоритет по названию и есть приоритет. А приоритет над чем, это смотря в каком окне. Например, в плаге экстрачаннел у меня сначала не получалось двигать каналы при редактировании, пока не поставил более высокий приоритет -1 (по умолчанию 0). И подумал, что видимо это приоритет в окне каналов перемещения вместе с каналом, а не просто перемещение курсора по списку каналов.
Не знаю смог объяснить свое понимание или нет. Конечно надо будет найти документацию и почитать там. Дело скорее всего гораздо проще. Просто мне этот вопрос сам по себе не был приоритетным, гораздо интереснее было двигаться дальше по питону.
Я работаю так. Если что не удается до конца понять, откладываю и продвигаюсь дальше. Скорее всего вопрос решится сам по себе потом. А нынче мне не до питона.......
В разделе девелоперс Dobrodel описАл свое видение этого вопроса. Почитай там. Правда я с его пониманием понятия приоритета в данном случае не согласен.........

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

Оффлайн Taapat

  • Мастер Джедай
  • ***
  • Сообщений: 3543
  • Поблагодарили: 10700
  • Уважение: +60
но вопрос по ActionMap  -
.......
         }, -2)
ака Учкун, я не претендую на специалиста по еныгме, и может до конца не понял ваше ведение этого вопроса или Dobrodel, но мое понимание в этом такое.
Когда одновременно должны работать разные карты нажатий (на одну и ту же кнопку прописаны разные в разных плугинах или в компонентах), то работать будет та, у кого приоритет выше, и соответственно и отработать будет тот плагин или компонент где эта карта прописана.
  • Zgemma H7S | Zgemma H.S | Edision OS mini + | Amiko SHD-8900 Alien | VU+ Solo2 | Gi ET11000 4K
taapat.blogspot.com

Оффлайн gorr

  • Младший Джедай
  • **
  • Сообщений: 102
  • Поблагодарили: 233
  • Уважение: +2
добрый день
еще вопрос
собрал простенький плагин - чтобы разобраться
ни как не пойму, "что он хочет"
точнее в чем причина
выдает сообщение

Extensions/P_menu(__init__()) got an unexpected keyword argument 'description')

сообщение вообщем то понятно - конструктор плагина получил непредвиденный словарный аргумент - 'description' те описание
только не понятно как исправить

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

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Повнимательнее товарищ, вот проблема:




return PluginDescriptor(name = "P_Menu", where = [PluginDescriptor.WHERE_PLUGINMENU], discription = "P_Menu", fnc = main)



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

Оффлайн gorr

  • Младший Джедай
  • **
  • Сообщений: 102
  • Поблагодарили: 233
  • Уважение: +2
спасибо
стыдно что проглядел

Оффлайн gorr

  • Младший Джедай
  • **
  • Сообщений: 102
  • Поблагодарили: 233
  • Уважение: +2
день добрый
что то запутался
подскажите в чем не прав
плагин запускается
в принципе работает - но не получается выход из него

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

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
.....
что то запутался
......
плагин запускается
....... но не получается выход из него

Вот здесь:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.ты указываешь, что использовать нужно две карты "myActionMap"  и "WizardActions", а собственно эти карты-то у тебя в файле кеймап.хмл присутствуют?
По умолчанию на имидже ОпенПли в кеймапе присутствует "WizardActions", но у этой карты нет примененного тобой ключа "exit".
Вот смотри:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.Ищу в этой карте .......mapto="exit" и не нахожу, этого ключа просто нет тут.
И карты "myActionMap" в этом кеймапе нет.

И если ты не добавил в кеймап нужный ключ или нужную карту (которую сам прописываешь - "myActionMap"), а судя по твоему посту так и есть, то какже отсутствующий пустой ключ может сработать?



В данном конкретном случае эту ошибку можно исправить двумя путями.
1. Добавить либо карту "myActionMap" в файл кеймап.хмл (/usr/share/enigma2/keymap.xml), либо просто ключ "exit" добавить в существующую в кеймапе карту "WizardActions".

Но этот первый путь неправильный, так как лучше не связываться с изменением кеймапа.
Легче и правильней второй путь.
2. Убрать из карты в плагине несуществующую карту "myActionMap", а в карту "WizardActions" добавить существующий в кеймапе ключ (смотри код наверху) "back", то бишь, чтобы сработал этот код в кеймапе:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.

То есть твоя карта в плагине будет выглядеть так:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
При этом еще нужно учесть, что вышеприведенный код справедлив для ресов типа уно, соло, дуо, ультимо и т.д....
А для других ресов есть свои особенности, которые касаются ID кнопок на пульте. FAQ на этот счет я писал в теме мультиквикбаттона.......

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

Оффлайн gorr

  • Младший Джедай
  • **
  • Сообщений: 102
  • Поблагодарили: 233
  • Уважение: +2
понял
спасибо
все работает

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

  • Рыцарь Джедай
  • *****
  • Забанен!
  • Сообщений: 1098
  • Поблагодарили: 4787
  • Уважение: +49
Начинаю онлайн-написание еще одного уже более крупного, и считаю очень полезного плагина-инструмента для тех, кто адаптирует скины под имиджи для паблика или для себя.

Один маленький инструмент уже написал, то есть выдирание из скина компонентов, отстутствующих в имидже ComponentsFromSkin - автосоздание списка компонентов из скина

Но это была честно сказать малюсенькая помощь в этом деле.

А вот если разработать плагин, который будет мощным инструментом для адаптации скинов?

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

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

Любой помощи при написании плагина буду благодарен, и само собой, кто поможет с кодом будет соавтором плагина.

Итак вот как думаю реализовать плагин. Перечислим в виде пунктов, что нам предстоит сделать.

1. Необходимо сначала выяснить, какие окна (Screen) являются системными (то есть обязательными) для того или иного имиджа.
Так как сейчас я на VTI, создадим плагин для VTI 7. Попутно надо выяснить, какие окна являются совершенно ненужными для этого имиджа, например они являются обязательными для другого имиджа.
Соответственно выяснив это, разработаем первую часть плагина, в котором напишем инструкцию о том, какие окна из этого скина можно (даже нужно) удалять из этого скин.хмл, и получится какие-то окна можно удалять, а можно и оставить, так как судя по всему они являются окнами каких-то плагинов и ничего не случится при их удалении. Так как все равно (скорее всего) в плагинах самих эти окна (каркасы) уже есть.
В этой же, первой части инструкции перечислим окна, которых не хватает для этого имиджа.
И вот сразу же тут есть повод посоветоваться. Например, перечисляя системные окна, которые необходимо прикрутить, нужно ли например привести тут же в этой инструкции готовый каркас для этого окна, где останется только скажем ввести свои цвета и свои картинки, все остальное уже будет готово? И введя свои цвета и картинки, просто вставить в скин.хмл.
Разумеется здесь надо договориться тогда об общем принципе, в этих готовых каркасах, нужно ли ПИГ-окно, сделать ли готовый каркас на весь экран и так далее.

2. На тот случай, если нужное окно есть, проверить каждое такое окно на предмет соответствия системному окну в этом имидже. Ведь в каждом имидже есть свои особенности. Например бинари имиджей разные, то, что eListBox поддерживает в одном имидже, в другом не поддерживается, виджеты в одинаковом для имиджей окнах могут содержаться разные, да и что там даже виджет с кнопкой может быть разный. Например где-то это виджет name="red_key", а где-то виджет name="key_red", а где-то source="red_key" с рендером Label и так далее и тому прочее.
Вобщем напишем подробную подсказку в инструкции, что, где и как менять в существующих окнах.
Пока не до конца представляю, как будем все это выдергивать из скина и как сравнивать, но думаю разберемся.


Далее на третий пункт пока фантазии не хватает. Вот и подскажете может быть.

Начинаем придумывать алгоритм для решения задач по первому пункту.
Для этого нужны хотя бы три скина, каждый из которых был бы точно работоспособен в одном из имиджей, VTI, BlackHole и OpenPli и желательно чтобы был приспособлен только на один из этих и не более.
Пошел искать такие скины. потом продолжим.....

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

Теги:
 

Похожие темы

  Тема / Автор Ответов Последний ответ
18 Ответов
8763 Просмотров
Последний ответ 24 сентября | 2010г. | 18:11:45
от Wolf
2 Ответов
5973 Просмотров
Последний ответ 22 ноября | 2013г. | 01:39:50
от LostSoul
27 Ответов
26319 Просмотров
Последний ответ 04 апреля | 2022г. | 06:06:17
от тихон
1 Ответов
9577 Просмотров
Последний ответ 20 марта | 2014г. | 00:40:50
от Taapat
0 Ответов
3582 Просмотров
Последний ответ 07 апреля | 2014г. | 00:52:47
от 2boom



X

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

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