首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在urwid中创建嵌套列表框?

如何在urwid中创建嵌套列表框?
EN

Stack Overflow用户
提问于 2013-10-21 17:19:14
回答 1查看 1.9K关注 0票数 6

是否可以将ListBoxes放在SimpleListWalkers中?我正在尝试创建嵌套的ListBoxes,但是我有以下错误:

AttributeError: 'MyListBox' object has no attribute 'rows'

代码语言:javascript
复制
import urwid

class MyListBox(urwid.ListBox):
    def focus_next(self):
        try: 
            self.body.set_focus(self.body.get_next(self.body.get_focus()[1])[1])
        except:
            pass
    def focus_previous(self):
        try: 
            self.body.set_focus(self.body.get_prev(self.body.get_focus()[1])[1])
        except:
            pass            

def handle_input(event):
    frame.header.set_text("key pressed %s" % event)
    if event == "q":
        raise urwid.ExitMainLoop
    elif event == "up":
        lb.focus_previous()
    elif event == "down" :
        lb.focus_next()        

widgets   = [urwid.AttrMap(urwid.Text(str(x)),None,"focus") for x in xrange(3)]
nested    = [urwid.AttrMap(urwid.Text(str(x)+"_sous"),None,"focus") for x in xrange(3)]
nested_lb = MyListBox(urwid.SimpleListWalker(nested))
lb        = MyListBox(urwid.SimpleListWalker(widgets+[nested_lb]))
frame     = urwid.Frame(lb,header=urwid.Text("Header"))
palette   = [("focus","dark cyan","white")]
loop      = urwid.MainLoop(frame,palette,unhandled_input = handle_input)
loop.screen.set_terminal_properties(colors=256)
loop.run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 15:03:51

根据手册的说法,ListBox是一个盒子小部件,里面包含流小部件。

小部件类型(框、流和固定)之间的区别在于它们的大小的计算方法。详细信息在上述链接中进行了描述。简而言之:ListBox从它的容器中得知它的大小,但要求它的孩子自己计算高度。由于另一个ListBox在里面,它不能提供这个值(没有rows方法)。

解决方案是将内部ListBox封装在BoxAdapter中,从而使box小部件看起来和行为类似于flow小部件:

代码语言:javascript
复制
...
widgets   = [urwid.AttrMap(urwid.Text(str(x)),None,"focus") for x in xrange(3)]
nested    = [urwid.AttrMap(urwid.Text(str(x)+"_sous"),None,"focus") for x in xrange(3)]
nested_lb = MyListBox(urwid.SimpleListWalker(nested))
lb        = MyListBox(urwid.SimpleListWalker(widgets+[urwid.BoxAdapter(nested_lb, 10)]))
...
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19500832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档