如何在 urwid 中指定边框?

How to specify borders in urwid?

我是 urwid 的新手,我想我误解了什么。我不明白为什么这不起作用。而且我不明白错误信息。

#!/usr/bin/env python3
import urwid

def show_or_exit(key):
    if key in ('q', 'Q'):
        raise urwid.ExitMainLoop()
    txt.set_text(repr(key))

txt = urwid.Text('FooBar')

fil = urwid.Filler(txt, valign='middle', height=('relative', 70))
box = urwid.LineBox(fil)
pad = urwid.Padding(box, align='center', width=('relative', 85))

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

我也遇到过这样的问题,要更好地了解发生了什么,您可能应该阅读 the documentation section about widgets sizing modes。基本上,这与小部件渲染工作的方式有关,每个小部件的渲染方式都不同,具体取决于其 "sizing mode"。这是了解 Urwid 最棘手的事情之一,一旦你明白了,你就可以用它来提高工作效率。 :)

这是您提供的代码的工作版本:

#!/usr/bin/env python3
import urwid


def show_or_exit(key):
    if key in ('q', 'Q'):
        raise urwid.ExitMainLoop()
    txt.set_text(repr(key))


txt = urwid.Text('FooBar')
widget = urwid.LineBox(txt)
widget = urwid.Padding(widget, align='center', width=('relative', 85))
widget = urwid.Filler(widget, 'middle')

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