我正在读取yml表单文件并将其内容作为urwid中的列。 我必须将这些列显示在控制台上。 如果我使用普通的列表框和列表行者,那么我可以获得屏幕上显示的列。 但是,我需要将一些列组合为一个块并将其显示在一个linebox小部件中。 我怎么能这样做?
我的每个列小部件都有两列,第一列是文本小部件,第二列是编辑小部件。 这就是我试过的:
试图通过附加到名为blockPile的桩(声明为blockPile = urwid.Pile([]))来创建一堆列,如下所示:
blockPile.contents.append(columnEntry, options='pack')
但是出现了这个错误
TypeError: append() got an unexpected keyword argument 'options'
然后删除了选项并使用了它:
blockPile.contents.append(columnEntry)
但出现以下错误
urwid.container.PileError: added content invalid: <Columns selectable box/flow widget>
接下来我使用了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'
如果我只使用列表框和列表行者而且列表框不适合其他任何内容,那么一切正常。 但我希望列的列表框放在一个行框中。我怎么能这样做?
答案 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
无论如何,你可能想要代码给你一个想法。 希望它有所帮助。