如何放置urwid.BigText变成一个列表框

2024-05-14 05:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图在列表框的顶部有一个BigText时,我总是得到一个错误AttributeError: 'BigText' object has no attribute 'rows'。我知道BigText是一个“固定”的小部件,而ListBox需要一个“flow”小部件,但是无论我尝试什么,我似乎都无法让我的程序接受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)

谢谢!在


Tags: title部件错误bodywidgetflowheadbanner
1条回答
网友
1楼 · 发布于 2024-05-14 05:33:41

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()

相关问题 更多 >