категории | RSS

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

Решил написать статью о интересных особенностях appuifw2.Listbox2 в Python.

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

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


aw.Item(title=u'DimonVideo', url='http://www.dimonvideo.ru')

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

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

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

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

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

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

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

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

aw.app.body.extend([aw.Item(title=x[1],   path_to_exe=x[2]) for x in applist.applist()])


Источник новости: dimonvideo.ru

kolayuk
2010-03-30T18:31:28Z

Здесь находятся
всего 0. За сутки здесь было 0 человек

Комментарии 3

#3   Ksench    

Просто и гениально)))
+


0 ответить

#3   DimaTROFIK    

Полезная статья, не знал что можно свои атрибуты добавлять.


0 ответить

Яндекс.Метрика