Python - пример простого списка

1

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

Может ли кто-нибудь представить простой пример того, как это можно сделать или указать на ссылку? Я видел примеры на сайте urwid, но я ищу что-то более общее.

редактировать

@Adam: Я нашел этот пример в Интернете. У меня возникают трудности с комментарием, поскольку я не знаком с API, и я новичок в python.

Edit2 Я понял это и обновил пример. Еще один вопрос - могу ли я получить счетчик предметов непосредственно из ListBox?

import urwid

palette = [('header', 'white', 'black'),
    ('reveal focus', 'black', 'dark cyan', 'standout')]

items = [urwid.Text("foo"),
         urwid.Text("bar"),
         urwid.Text("baz")]

content = urwid.SimpleListWalker([
    urwid.AttrMap(w, None, 'reveal focus') for w in items])

listbox = urwid.ListBox(content)

show_key = urwid.Text("Press any key", wrap='clip')
head = urwid.AttrMap(show_key, 'header')
top = urwid.Frame(listbox, head)

def show_all_input(input, raw):

    show_key.set_text("Pressed: " + " ".join([
        unicode(i) for i in input]))
    return input


def exit_on_cr(input):
    if input in ('q', 'Q'):
        raise urwid.ExitMainLoop()
    elif input == 'up':
        focus_widget, idx = listbox.get_focus()
        if idx > 0:
            idx = idx-1
            listbox.set_focus(idx)
    elif input == 'down':
        focus_widget, idx = listbox.get_focus()
        idx = idx+1
        listbox.set_focus(idx)

def out(s):
    show_key.set_text(str(s))


loop = urwid.MainLoop(top, palette,
    input_filter=show_all_input, unhandled_input=exit_on_cr)
loop.run()
  • 0
    Можете ли вы указать, с чем у вас проблемы?
Теги:
console
urwid

1 ответ

0

listboxes делят свой SimpleListWalker внутри своего атрибута body, который, к счастью, правильно реализует len

len(listbox.body)

Дополнительные доказательства:

(Pdb) listbox.body
SimpleListWalker([<AttrMap flow widget <Text flow widget 'Chemma!'> attr_map={None: None} focus_map={None: 'line'}>, <AttrMap flow widget <Divider flow widget div_char='-'> attr_map={None: None} focus_map={None: 'line'}>, <AttrMap flow widget <Text flow widget 'Another text widget!'> attr_map={None: None} focus_map={None: 'line'}>, <AttrMap flow widget <Divider flow widget div_char='-'> attr_map={None: None} focus_map={None: 'line'}>, <AttrMap flow widget <Text flow widget 'What is your name'> attr_map={None: None} focus_map={None: 'line'}>, <AttrMap flow widget <Divider flow widget div_char='-'> attr_map={None: None} focus_map={None: 'line'}>, <AttrMap flow widget <Text flow widget 'Boy ?'> attr_map={None: None} focus_map={None: 'line'}>])
(Pdb) len(listbox.body)
7
(Pdb) 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню