Urwid提升(maxcol,)=要解压缩的值太多

2024-06-12 12:34:17 发布

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

我正在尝试为机器人创建一个Urwid UI。我心目中的布局由三个水平区域组成:

  • 一行消息(如“按下未知键”)
  • 运行日志消息(机器人中发生的任何事件)
  • 我希望始终显示我所关注的变量

我创建了以下代码,生成了截屏布局:

brief_message = urwid.Text(u'Robot starting...')
log_messages = urwid.Text('running log messages here')
variables = urwid.Text('k=v variable list here')
body = urwid.Pile([
    #urwid.Filler(brief_message, height=1),
    urwid.LineBox(urwid.Filler(log_messages, valign='bottom', top=1)),
    urwid.LineBox(urwid.Filler(variables, valign='top', bottom=1)),
])
loop = urwid.MainLoop(body)
loop.run()

screenshot of resulting layout

问题是,如果我取消注释urwid.Filler(brief_message, height=1)行,我会得到一个异常,我不知道为什么:

[ full traceback snipped ]
  File "/tmp/venv/lib/python3.8/site-packages/urwid/widget.py", line 1001, in render
    (maxcol,) = size
ValueError: too many values to unpack (expected 1)

understand之所以会发生这种情况,是因为流小部件被视为框小部件,但我认为用urwid.Filler包装brief_message正是我应该做的。此外,如果我从填充程序中删除height=1,程序会工作,但是brief_message的高度是屏幕的三分之一,这不是我想要的-它应该是一个单行线

我错过了什么


Tags: textlog消息messagehere机器人body布局
1条回答
网友
1楼 · 发布于 2024-06-12 12:34:17

查看documentationfor urwid.Filler它说:

If body is a flow widget then height must be 'flow' and min_height will be ignored.

如果使用诸如urwid.Text之类的流小部件作为主体,则不能将高度设置为1或除流以外的任何内容

就实际得到你想要的结果而言,下面是我最好的猜测。我没有一个合适的测试环境,所以我没有

查看documentationfor Pile,您可以传递具有高度值的元组,它将被视为一个box小部件。所以你可以试试

body = urwid.Pile([
    (1, urwid.Filler(brief_message)),
    urwid.LineBox(urwid.Filler(log_messages, valign='bottom', top=1)),
    urwid.LineBox(urwid.Filler(variables, valign='top', bottom=1)),
])

相关问题 更多 >