0

我正在阅读一个 yml 表单文件并将其内容作为 urwid 中的列获取。我必须在控制台上显示这些列。如果我使用普通的列表框和 listwalker,那么我可以让列显示在屏幕上。但是,我需要将一些列分组为一个块并将其显示在一个 linebox 小部件中。我该怎么做?

我的每个列小部件都有两列,第一列是文本小部件,第二列是编辑小部件。这是我尝试过的:

  1. 尝试通过附加到名为 blockPile 的堆(声明为 blockPile = urwid.Pile([ ]) )来创建一堆列,如下所示:
    blockPile.contents.append(columnEntry, options='pack')

    但收到此错误

    TypeError: append() got an unexpected keyword argument 'options'

  2. 然后删除了选项并使用了这个:

    blockPile.contents.append(columnEntry)

    但出现以下错误

    urwid.container.PileError: added content invalid: <Columns selectable box/flow widget>

  3. 接下来我使用了列表框

    blockContent = urwid.SimpleListWalker([])
    blockListbox = urwid.ListBox(blockContent)

    并使用 append 将我的列放入 listBox
    blockContent.append(columnEntry)

    最后将列表框放在盒子适配器中

    box = urwid.BoxAdapter(blockContent, height = 20)

    然后在一个 linebox 中返回它
    return urwid.LineBox(box, title='|** Block **|')

    但现在我收到以下错误
    AttributeError: 'SimpleListWalker' object has no attribute 'selectable'

如果我只使用一个列表框和一个 listwalker 并且不将列表框放在其他任何东西中,那么一切正常。但我希望将列的列表框放在一个行框中。我该怎么做?

4

1 回答 1

0

很久没有玩 urwid 了,但我认为在 urwid 中,为了让一组元素表现得像一个 listWalker,你必须设置一个可选择的属性。

在这个旧代码中:https ://github.com/Nic0/tyrs/blob/master/src/tyrs/widget.py#L95 我必须在包含一堆东西的对象中将可选属性设置为 True推特的状态。

def selectable (self):
    return True

无论如何,您可能希望代码给您一个想法。希望能帮助到你。

于 2013-08-03T06:55:16.997 回答