无法在urwid的linebox小部件中放置一系列列

时间:2013-08-02 17:52:22

标签: python user-interface python-2.7 console-application urwid

我正在读取yml表单文件并将其内容作为urwid中的列。 我必须将这些列显示在控制台上。 如果我使用普通的列表框和列表行者,那么我可以获得屏幕上显示的列。 但是,我需要将一些列组合为一个块并将其显示在一个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. 接下来我使用了listbox

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

    并使用append来匹配listBox中的列 blockContent.append(columnEntry)

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

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

    然后将其放回行李箱中 return urwid.LineBox(box, title='|** Block **|')

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

  4. 如果我只使用列表框和列表行者而且列表框不适合其他任何内容,那么一切正常。 但我希望列的列表框放在一个行框中。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

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

在这段旧代码中:https://github.com/Nic0/tyrs/blob/master/src/tyrs/widget.py#L95 我必须在包含一堆东西的对象中将属性selectable设置为True,这会给出twitter的状态。

def selectable (self):
    return True

无论如何,你可能想要代码给你一个想法。 希望它有所帮助。