2

而不是像urwid 示例中那样执行此操作:

   simple_walker = urwid.SimpleFocusListWalker([
        urwid.AttrMap(urwid.Text([u'\n  ',caption]), 'heading'),
        urwid.AttrMap(line, 'line'),
        urwid.Divider()] + choices + [urwid.Divider()])
   self.listbox=urwid.ListBox(simple_walker)

我想这样做:

    simple_walker = urwid.SimpleFocusListWalker([])
    simple_walker.append(urwid.AttrMap(urwid.Text([u'\n  ',caption]), 'heading'))
    simple_walker.append(urwid.AttrMap(line, 'line'))
    simple_walker.append(urwid.Divider())
    simple_walker.append(choices)
    simple_walker.append(urwid.Divider())
    self.listbox=urwid.ListBox(simple_walker)

但是,当我这样做时,我会得到一个很长的异常转储,结尾为:

  File ".../listbox.py", line 717, in _set_focus_complete
(maxcol,maxrow), focus)
   File ".../listbox.py", line 687, in _set_focus_first_selectable
(maxcol, maxrow), focus=focus)
   File ".../listbox.py", line 419, in calculate_visible
n_rows = next.rows( (maxcol,) )

AttributeError:“列表”对象没有属性“行”

将项目附加到 SimpleFocusListWalker 的正确方法是什么。

我正在尝试从上到下构建一个菜单,而不在构造函数中指定整个内容。

4

1 回答 1

2

上面的问题是“选择”是一个列表。需要如下:

for ii in choices:
    simple_walker.append(ii)
于 2017-11-29T17:34:54.983 回答