mcw*_*mcw 4 python listbox widget urwid
AttributeError: 'BigText' object has no attribute 'rows'当尝试在列表框顶部放置 BigText 时,我不断收到错误。我知道 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)
Run Code Online (Sandbox Code Playgroud)
谢谢!
BigText具有“固定”大小。这意味着小部件的宽度和高度均由小部件定义。ListBox 仅接受“流”大小调整的小部件。这意味着宽度将由容器(在本例中为 ListBox)决定。因此,您必须首先将“固定”小部件转换为“流”小部件。这可以通过将宽度属性设置为“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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
947 次 |
| 最近记录: |