Внимание! Новое программного обеспечение для World Vision Foros Ultra и World Vision Foros Combo S2/T2 выложено в теме с обновлением.

Подробней в теме: по ссылке

Автор Тема: Вопросы и ответы по программированию Python  (Прочитано 17743 раз)

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

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Вот с этим пока у меня не получается.
В стандартном размере вывести без проблем, а вот через resize никак не хочет работать гад....
Зависит от того как вы пиконы вписываете.Судя по вашему коду то перерозмерить проще через picload вписав в него например брать размер пикона и делить его на 2(тоисть получите не 100 на 60 а 50 на 30) .Смотрел ваш код-очень все логично отличная работа.Тока одно смущает(не сочтите за критику или навязывание своей идеи).Вывод картинок для прогрессбаров.По вашему коду вы полностью отказались от пнг со скинов а ведь очень много скинов в листе имеют вписанные свои пнг для прогрессбаров...я бы сделал так

                   elif attrib == 'picServiceEventProgressbar':
                        pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, value))
                        if pic:
                            self.picServiceEventProgressbar = pic   

и дописав

        self.selectionPixmap = None
        self.picServiceEventProgressbar = None

тогда там где прогрессбары у вас можна сделать по типу вот так

                        if self.picServiceEventProgressbar == None:   
                           
                               res.append((eListboxPythonMultiContent.TYPE_PROGRESS,
                                  .
                                  .ваш код
                            else:
                               pixmap = self.picServiceEventProgressbar 
                               res.append((eListboxPythonMultiContent.TYPE_PROGRESS_PIXMAP,
                                   .
                                   .ваш код
так будет если картинки нет в писанной в скине выводить прогрессбар если есть-то прогрессбар используя картинку со скина
« Последнее редактирование: 18 Март 2013, 12:45:42 от Ednaz »
Эти пользователи сказали Вам СПАСИБО:

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #1 : 08 Март 2013, 14:18:49 »
О переносе прогрессбаров или процентов по вашему же коду....Я покажу как можете сделать тока писанины будет куча у вас))) смотрите

напримере прогрессбаров
ваш код сейчас
                                res.append((eListboxPythonMultiContent.TYPE_PROGRESS,
                                 xPos+3,
                                 11,
                                 52,
                                 8,
                                 percent,
                                 1,
                                 foreColor,
                                 foreColorSelected))
                                res.append((eListboxPythonMultiContent.TYPE_TEXT,
                                 xPos+58,
                                 0,
                                 57,
                                 height,
                                 0,
                                 RT_HALIGN_RIGHT | RT_VALIGN_CENTER,
                                 text,
                                 serviceDescriptionColor,
                                 foregroundColorSel,
                                 backgroundColor,
                                 backgroundColorSel))
                                xPos += 120
xPos+3- положение сейчас прогрессбара так? есть понятие width-  width = self.l.getItemSize().width()логично взять нужный вам размер прогрессбара и отнять его от width(это размер беретса со скина тоисть ширина для листа)получитса вот так

                                res.append((eListboxPythonMultiContent.TYPE_PROGRESS,
                                width - 60,
                                 11,
                                 52,
                                 8,
                                 percent,
                                 1,
                                 foreColor,
                                 foreColorSelected))
                                res.append((eListboxPythonMultiContent.TYPE_TEXT,

тоисть мы отняли 52(размер прогрессбара в длину плюс 8 что бы не залазил за края) да и по логике xPos+58, уже не ставим что бы следующие элементы не брали отступ в своем начале.Это мы сделали но есть еще дескрипшен у вас поэтому в пункте для вывода описания отнимаем теперь наших 60 плюс длину прогрессбара и того -112 это вписуем в пункте вывода text = '(%s)' % event.getEventName()
тоисть будет так

                                res.append((eListboxPythonMultiContent.TYPE_TEXT,
                                 xPos,
                                 0,
                                 width - xPos -112,
                                 height,
                                 2,
                                 RT_HALIGN_LEFT | RT_VALIGN_CENTER,
                                 text,
                                 serviceDescriptionColor,
                                 serviceDescriptionColorSelected,
                                 backgroundColor,
                                 backgroundColorSel))
по логике так....попробуйте...тока писать очень много)) учитывая что у вас вписано вывод картинок для прогрессбаров куча...

Добавлено: 08 Март 2013, 14:22:37
как в Cooltvguide не знаю-я не ломаю код чужой.Просто если по логике то чет похожее...Все что сделал кто-то в питоне можна сделать как минимум по 3 разным вариантам чем питон мне и нравитса...
« Последнее редактирование: 08 Март 2013, 14:22:37 от nikolasi »
Эти пользователи сказали Вам СПАСИБО:

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #2 : 08 Март 2013, 14:37:13 »
Можна и MultiContent я ж пример привел на основе вашего кода который вы сейчас используете.Да и разницы впринцыпе почти никакой.Но лучше использовать модуль eListbox по моему мнению-слишком много инфы перелопачивает список...А   No EPG data available в списке-не пестрит так?Както думаю привычнее когда нет описание и пусто-быстрее вроде понимаеш что его нет))
« Последнее редактирование: 08 Март 2013, 14:46:39 от nikolasi »
Эти пользователи сказали Вам СПАСИБО:

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #3 : 08 Март 2013, 16:52:03 »
тота я смотрю что очень знакомое но не помню где видел))) а вообще у вашего проэкта огромная перспектива-не нужно патчить бинар и либы а функций и возможностей стока скока фантазии хватит))) что сказать-вы сделали огромное дело думаю все пользователи вам должны говорить тока спасибо.Тока все же лучше все делать через eListbox-все что идет через либы напрямую не тормозит функции если же задействован питон-тут буду тормоза которые побороть практически не реально.
Эти пользователи сказали Вам СПАСИБО:

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #4 : 08 Март 2013, 17:25:18 »
да и я не професиональный программист....может больше чуть вашего знаю так как за стока лет опыта поднабралса да и практике тоже....и получаетса у вас оченб хорошо.Если надо чего-спрашивайте-могу помогать вам в меру соих возможностей.а код не смотрю из-за принцыпа-у нас с индб пару лет назад очень многое потянули арабы были и пшеки тоже.Поэтому с тех пор принцып-тока свое тока своими мозгами плюс защищать свое от недобросовестных пользователей других команд

Добавлено: 09 Март 2013, 14:52:42
вот тоже эксперементировал со своим списком....можна выводить нехт евент но.....даже не знаю....места много надо тогда но если увеличить размер между строками-намного меньше влезет строк...а вот добавить начало и конец текущей передачи скорее всего будет полезно....это так-размышления вам)).Все упираетса тока в вашу фантазию
« Последнее редактирование: 09 Март 2013, 14:52:43 от nikolasi »
Эти пользователи сказали Вам СПАСИБО:

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #5 : 09 Март 2013, 23:40:20 »
Ну не знаю-помоему вы усложняете себе жизнь)) я б если делал то вписал тока брать картинку со скина для прогрессбара и если нет-то выводил бы просто цветом....я немного консервативный в этом-если делать то конретно для замены сервицелист на ваш а остальное сделают скинмейкеры.да я чуть дал маху-сорри-прочитал свое сообщение

теперь наших 60 плюс длину прогрессбара и того -112 это вписуем в пункте вывода text = '(%s)' % event.getEventName()

так отрежетса часть описания....просто впишите 60 плюс например 5 или 10(что бы не залазило описание на прогрессбары или проценты).Сори-не доглядел сразу.А пиконы-их какраз самое простое что можна сделать))  тем более все у вас есть в вашем коде что нужно для пиконов...
Эти пользователи сказали Вам СПАСИБО:

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #6 : 10 Март 2013, 13:00:42 »
вот так не пишите service = service[:pos].rstrip(':').replace(':', '_')
так в букетах с айпитиви пиконов не будет.айпитиви беретса вся строка как референс и тогда по  вашему будет референс по типу 1:0:1:4:1:2:FFFF0000:0:0:0:http%3A//4.sh.tvshka.net/~ХХХХХХХХ/4/:Россия К нам же надо тока первых 10 знаков лучше впишите так
service = '_'.join(service.split(':', 10)[:10])

вывод счас вчитаюсь в ваш код момент

Добавлено: 10 Март 2013, 13:13:07
попробуйте вот так если уже вписано вызов ePicLoad

     self.picon = ePicLoad()

    def findPicon(self, service = None):
                       
if service is not None:
                        service = service.toString()
pos = service.rfind(':')
if pos != -1:
service = '_'.join(service.split(':', 10)[:10])
for path in self.PiconPaths:
pngname = path + service + ".png"
if fileExists(pngname):
return pngname
     

    def buildServiceList(self, service, **args):
        picon = self.findPicon(service)
if picon is None:
                        tmp = resolveFilename(SCOPE_CURRENT_SKIN, 'picon_default.png')
                        if fileExists(tmp):
                            picon = tmp
                        else:
                            picon = resolveFilename(SCOPE_SKIN_IMAGE, 'skin_default/picon_default.png')
                         
        piconWidth = 40
        piconHeight = 24
        self.picon.setPara((piconWidth, piconHeight, 1, 1, False, 1, '#000f0f0f'))
        self.picon.startDecode(picon, 0, 0, False)
        picon2 = self.picon.getData()   
и далее там где вы вписываете в свой конструктор

                                                pixmap = picon2
                                                res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST,
                                                 0,
                                                 2,
                                                 40,
                                                 24,
                                                 pixmap))

тока 40 на 24-не маловато для пиконов?размер всмысле

да впишите не помню есть ли увас но проверьте
from Tools.Directories import resolveFilename, SCOPE_CURRENT_SKIN, fileExists, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE
« Последнее редактирование: 10 Март 2013, 13:14:58 от nikolasi »
Эти пользователи сказали Вам СПАСИБО:

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #7 : 10 Март 2013, 13:34:28 »
Большое спасибо!
Сейчас попробую.

SCOPE_SKIN_IMAGE не был импортирован............
Получается это для нахождения дефолтного скина.....
ну да.Допустим вы перешли на дефолтный скин тогда был бы или крашш или в лучшем случаи просто пустое окно на ченел селекшене...
Эти пользователи сказали Вам СПАСИБО:

Оффлайн Дмитрий73

  • Помощник модератора
  • Фельдфебель
  • *****
  • Спасибо
  • -> Вы поблагодарили: 172
  • -> Вас поблагодарили: 3155
  • Сообщений: 2221
  • Репутация: +3181/-0
  • Пол: Мужской
  • awards Заслуженный пользователь клуба За весомый программный вклад Огромный вклад в развитие тем форума Продвинутый пользователь За заслуги перед wvclub.net За верность клубу
    • Награды
  • Модель ресивера: et8500/et7000mini/formuler1
Воросы и ответы по программированию Python
« Ответ #8 : 16 Март 2013, 16:16:30 »
Дима не меняй весь референс оставь вначале 4097 и пикон тоже надо переименовать -вначале всегда 4097-так будет работать...
Спасибо.
Я просто помочь хотел.
Сорри,что в этой теме,но только один вопрос задам и все.
Ты в этом точно разбираешься.
Компонент EpgList.py
Хочу в мульти епг добавить вывод оставшихся минут до конца передачи,это в варианте текущего события,когда прогресс бар.
Второй час сижу,что то заклинило.
дефка  buildMultiEntry
               (eListboxPythonMultiContent.TYPE_TEXT, r4.x, r4.y, r4.w, r4.h, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER, "+%d min" % remaining),
Я тут накидал,но точно знаю что не верно,просто что было понятней.
if beginTime is not None:
if nowTime < beginTime:
begin = localtime(beginTime)
end = localtime(beginTime+duration)
# print "begin", begin
# print "end", end
res.extend((
(eListboxPythonMultiContent.TYPE_TEXT, r4.x, r4.y, r4.w, r4.h, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER, "%02d.%02d - %02d.%02d"%(begin[3],begin[4],end[3],end[4])),
(eListboxPythonMultiContent.TYPE_TEXT, r3.x, r3.y, r3.w, r3.h, 0, RT_HALIGN_LEFT, EventName)
))
else:
percent = (nowTime - beginTime) * 100 / duration
remaining = (nowTime - int(time())) / 60
res.extend((
(eListboxPythonMultiContent.TYPE_TEXT, r4.x, r4.y, r4.w, r4.h, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER, "+%d min" % remaining),
(eListboxPythonMultiContent.TYPE_PROGRESS, r2.x, r2.y, r2.w, r2.h, percent),
(eListboxPythonMultiContent.TYPE_TEXT, r3.x, r3.y, r3.w, r3.h, 0, RT_HALIGN_LEFT, EventName)
))
return res
Может я и время неправильно подсчитываю,да и вообще не знаю,в прогресс бар можно ли что еще вписать.
В общем нужен совет,как это должно выглядеть.
Примерно...

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #9 : 16 Март 2013, 17:01:12 »
или так
now = int(time())
remaining= (end - now)  / 60

Оффлайн Дмитрий73

  • Помощник модератора
  • Фельдфебель
  • *****
  • Спасибо
  • -> Вы поблагодарили: 172
  • -> Вас поблагодарили: 3155
  • Сообщений: 2221
  • Репутация: +3181/-0
  • Пол: Мужской
  • awards Заслуженный пользователь клуба За весомый программный вклад Огромный вклад в развитие тем форума Продвинутый пользователь За заслуги перед wvclub.net За верность клубу
    • Награды
  • Модель ресивера: et8500/et7000mini/formuler1
Воросы и ответы по программированию Python
« Ответ #10 : 16 Март 2013, 17:51:44 »
Спасибо вам обоим.
Я почему изначально думал,что это число.
В итоге заработало так:
remaining = (int(beginTime+duration) - int(time())) / 60
res.extend((
(eListboxPythonMultiContent.TYPE_TEXT, r4.x, r4.y, r4.w, r4.h, 1, RT_HALIGN_CENTER|RT_VALIGN_CENTER, "+%d min" % remaining),
(eListboxPythonMultiContent.TYPE_PROGRESS, r2.x, r2.y, r2.w, r2.h, percent),
(eListboxPythonMultiContent.TYPE_TEXT, r3.x, r3.y, r3.w, r3.h, 0, RT_HALIGN_LEFT, EventName)
))
Я его сделал внутри прогресс бара,это вроде и правильно,но возникли проблемы:
1)сам прогресс бар(наползает) закрывает минуты
2)при селекции та же проблема
Вы не знаете есть ли какой то приоритет в таком формате?

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #11 : 16 Март 2013, 19:59:52 »
Дима я так думал сделать в меню каналов тока прогрессбар опусти чуть ниже а оставшееся время просто сделай вверху прогрессбара так что бы он не наползал на него я тока такой выход был нашел но чет не понравилось то отказалса....

Оффлайн Дмитрий73

  • Помощник модератора
  • Фельдфебель
  • *****
  • Спасибо
  • -> Вы поблагодарили: 172
  • -> Вас поблагодарили: 3155
  • Сообщений: 2221
  • Репутация: +3181/-0
  • Пол: Мужской
  • awards Заслуженный пользователь клуба За весомый программный вклад Огромный вклад в развитие тем форума Продвинутый пользователь За заслуги перед wvclub.net За верность клубу
    • Награды
  • Модель ресивера: et8500/et7000mini/formuler1
Воросы и ответы по программированию Python
« Ответ #12 : 16 Март 2013, 22:46:11 »
Дима я так думал сделать в меню каналов тока прогрессбар опусти чуть ниже а оставшееся время просто сделай вверху прогрессбара так что бы он не наползал на него я тока такой выход был нашел но чет не понравилось то отказалса....
Пришлось вникнуть,жаль что внутри прогресса бара никак ,там все переделывать надо.
Просто жалко,что этот тип епг встроенный в изначально в энигму,какой то ущербный.
Так думаю будет чутка по информативней,а то толку с этого типа епг было никакого :).
ака Учкун
Сорри еще раз,что влез,просто показалось тема немного общая,да я и не занимался раньше таким.
Посты снесу,если мешают.

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Воросы и ответы по программированию Python
« Ответ #13 : 18 Март 2013, 03:16:35 »
если с картинками прогрессбар то просто можна вписать Color свой
                                res.append((eListboxPythonMultiContent.TYPE_PROGRESS_PIXMAP,
                                   xPos+3,
                                   12,
                                   52,
                                   8,
                                   percent,
                                   pixmap,
                                   1,
                                   foreColor2))
                               xPos += 64
если же цветом без пнг...тут надо подумать так как  backgroundColor сделает подложку всю того цвета что в нем вписано а нужно именно border...
« Последнее редактирование: 18 Март 2013, 03:51:08 от nikolasi »
Эти пользователи сказали Вам СПАСИБО:

Оффлайн nikolasi

  • Супер VIP
  • Младший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 18
  • -> Вас поблагодарили: 276
  • Сообщений: 120
  • Репутация: +278/-0
  • Пол: Мужской
  • awards Эксперт За знание своего дела Специалист Enigma2 Продвинутый пользователь За весомый программный вклад За заслуги перед wvclub.net
    • Награды
  • Модель ресивера: vu+ solo2, vu+ solo se
Да если с картинкой то все просто....думаю для прогреесбара придетса всеже писать свой блок в сервислисте а именно компоновка его и вывод тогда можна указать и  borderColor и  borderColor селектед.Вчера физичиски не успел ничего сорри так как сын мой приболел(ему всего год и 4 мес) и капризничает снова с рук не слазит...постараюсь сегодня все же добить все что хотел сделать.
Эти пользователи сказали Вам СПАСИБО: