如何将urwid.BigText放入urwid.ListBox

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将urwid.BigText放入urwid.ListBox相关的知识,希望对你有一定的参考价值。

当我试图在ListBox的顶部有一个BigText时,我不断收到错误AttributeError: 'BigText' object has no attribute 'rows'。我知道BigText是一个“固定”小部件,而ListBox期望一个“流”小部件,但无论我尝试什么,我似乎无法让我的程序采用BigText。这是我尝试过的一个详尽的例子:

head_title = urwid.BigText(('banner', u'Header'), urwid.HalfBlock5x4Font())
head = urwid.Filler(head_title)
# head = urwid.AttrMap(head, 'banner')
# head = urwid.AttrMap(head, 'streak')
head = urwid.BoxAdapter(head, 3)
print head
# this gives me `<BoxAdapter flow widget <Filler box widget <BigText fixed widget>> height=3>`


body = [head, urwid.Divider()]
return urwid.ListBox(body)

谢谢!

答案

BigText是一种“固定”尺寸。这意味着窗口小部件的宽度和高度都由窗口小部件定义。 ListBox只接受'flow'大小调整的小部件。这意味着宽度将由容器决定(在本例中为ListBox)。因此,您必须先将“固定”小部件转换为“流式”小部件。这可以通过将width属性设置为'clip'来使用Padding装饰小部件完成。

请看这里的完整示例:

import urwid
def show_or_exit(key):
    if key in ('q', 'Q'):
        raise urwid.ExitMainLoop()
    return key

head = urwid.ListBox(urwid.SimpleFocusListWalker([
    urwid.Padding(
        urwid.BigText(('banner', "Hello world"), urwid.HalfBlock5x4Font()),
        width='clip')
]))

loop = urwid.MainLoop(head, unhandled_input=show_or_exit)
loop.run()

以上是关于如何将urwid.BigText放入urwid.ListBox的主要内容,如果未能解决你的问题,请参考以下文章

如何将DynamoDB放入请求放入队列

c#如何将查询后的结果放入list中

如何将第三方图像放入缓存

如何使用 htaccess 将 fontawesome 放入缓存中

如何将 IDispatch::Invoke 放入 MFC C++ 线程?

Swift:如何将字符串放入 \()? [复制]