Домой

Последняя активность

  

Интересные особенности Listbox2 в Symbian Python

 Ptaxa54 (6) [#] (18.05.2014 / 14:13)
Решил написать статью о интересных особенностях appuifw2.Listbox2 в Python.

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

Прежде чем разбираться с особенностями Listbox рекомендую ознакомиться как в
принципе им пользоваться в appuifw2 API.
Нас интересует то что все элементы листбокса2 являются объектами appuifw2.Item,
то есть экземплярами класса appuifw2.Item. Этот класс имеет некоторые
обязательные (и не очень) атрибуты:
* title - название пункта, или первая строка элемента в листбоксе
* subtitle - вторая строка элемента в листбоксе
* многие другие icon, marked и др...
Так вот удобной особенностью Listbox2 является то что при создании appuifw2.Item
можно делать свои атрибуты в appuifw2.Item, которые будут храниться прямо в
Listbox2, но отображаться не будут, то есть например

  1. aw.Item(title=u'Лайт Портал', url='http://ligh.te.ua')


Мы добавили атрибут url значение которого равно строке http://www.dimonvideo.ru,
если же добавить такой элемент в листбокс то мы увидим однострочный пункт с
надписью DimonVideo. Но при необходимости мы легко сможем достать атрибут url
например следующим образом

  1. i=appuifw2.app.body.current_item() # ВАЖНО! Этот метод возвращает выделенный
  2. объект appuifw2.Item, а не номер выбранного элемента
  3. dv_url=i.url #dv_url примет значение http://ligh.te.ua


Теперь проиллюстрирую где это можно применить на практике.

Задача:
Сделать список приложений чтобы по выбору оно запускалось (не важно через laa
или e32.start_exe). Я буду делать через e32.start_exe, так больше новичков
поймет.
Если реализовывать эту задачу с помощью обычного Listbox, то помимо самого
листбокса понадобится еще один список с путями к .exe файлам (причем описанный в
глобальном пространстве, так как наполнение происходит в одной фунции, а
использование в другой).
При реализации же с помощью Listbox2 необходимость использования дополнительной
переменной исчезает, так как пути к exe файлам можно записать прямо в Listbox2.
Здесь продемонстрирую только создание листбокса, полный исходник можно найти
здесь.

  1. import appuifw2 as aw, e32, applist
  2. ........
  3. aw.app.body=aw.Listbox2(items=[], select_callback=select)
  4. items=[]
  5. list=applist.applist() # список приложений вида [(уид, имя, путь), ...]
  6. for app in list:
  7. name=app[1]
  8. path=app[2]
  9. lb_item=aw.Item(title=name, path_to_exe=path) # создаем элемент листбокса,
  10. обратите внимание что мы создаем собственный атрибут path_to_exe, в котором
  11. хранится путь к exe файлу
  12. items.append(lb_item)
  13. aw.app.body.extend(items) # добавляем в сам листбокс список объектов aw.Item


Теперь рассмотрим функцию select которая будет обрабатывать выбор элемента.

  1. def select():
  2. i=aw.app.body.current_item()# получаем объект aw.Item соответствующий
  3. выбранному элементу
  4. exe=i.path_to_exe # из атрибута path_to_exe достаем путь к exe файлу
  5. e32.start_exe(exe, '')


И в конце еще хочу показать как можно короче сделать добавление элементов с
помощью спискового включения

  1. aw.app.body.extend([aw.Item(title=x[1], path_to_exe=x[2]) for x in
  2. applist.applist()])
  Всего: 1

Зарегистрируйтесь и сможете комментировать все темы. Кнопочка вверху
Фильтр по автору
Скачать тему

В Форум

Новые вверху
Statok.net Рейтинг@Mail.ru
spywap.nettop-sid.ru
Яндекс.Метрика