2011-10-29 21 views
1

我在看urwid來開發一個控制檯應用程序。作爲一個起點,我正在尋找一個列表框的簡單示例,該列表框顯示可以使用上/下鍵滾動的幾行。蟒蛇 - urwid簡單的列表框的例子

任何人都可以提供一個簡單的例子,說明如何做到這一點或指向我的鏈接?我在urwid網站上看到了這些例子,但我正在尋找更基本的東西。

編輯

@Adam:我發現這個例子在線。我對註釋部分有困難,因爲我不熟悉API,我是一名Python新手。

編輯2 我想出來並更新了示例。 還有一個問題 - 我可以直接從列表框中獲取項目數量嗎?

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

你能指出您有什麼麻煩? –

回答

0

列表框分享所幸實現LEN正確自己的身體屬性中的SimpleListWalker

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)