python - 如何将 urwid.BigText 放入 urwid.ListBox

标签 python listbox widget urwid

尝试在 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 仅接受“流”大小的小部件。这意味着宽度将由容器决定(在本例中为 ListBox)。因此,您必须首先将他的“固定”小部件转换为“流”小部件。这可以通过 Padding 来完成通过将 width 属性设置为 'clip' 来装饰小部件。

完整示例请看这里:

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

关于python - 如何将 urwid.BigText 放入 urwid.ListBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934613/

相关文章:

python - 生成范围 (1, 2, 3...99; 1, 2, 3...99; ) 内的唯一数字序列,没有重复项

android - 重新启动后,小部件 onUpdate 未在单击按钮时设置 pendingIntent

flutter 中的日历周 View

c# - 如何使用 C# 中的字符串从具有数据源集的列表框中删除项目

wpf - 从 MouseLeftButtonDown 获取 WPF ListBox 项

segmentation-fault - 使用 Vala 自定义 GTK 小部件

python - 如何在 Anaconda 版本中安装 theano。 2.1 适用于 Python 3.4 的 Windows 64 位?

python - 调整大小不会影响 PyQt5 中的布局

python - 两个列表(男孩和女孩)的所有可能(一夫一妻制)配对

c# - 数据绑定(bind) WPF 列表框?