如何更改 urwid 小部件导航的键映射?

How to change key mapping for urwid widget navigation?

如何 set/change CommandMap 中的 SimpleFocusListWalker?默认情况下,'up' 和 'down' 击键与更改焦点相关联。 我想将这些修改为其他内容。

这可能吗?

一个简单有效的解决方案是覆盖 ListBoxkeypress 方法并替换键:

import urwid

class MyBox(urwid.ListBox):
    
    def keypress(self, size, key): 
        if key in {'up', 'down'}:
            print('use (shift) tab to move cursor.')
            return
        key_map = {
            "shift tab": "up",
            "tab": "down",
        }
        super().keypress(size, key_map[key])

button_list = [urwid.Button(str(k)) for  k in range(10)]
urwid.MainLoop(MyBox(button_list)).run()

最好使用内置的 keypress 方法,因为它具有跳过 urwid.Divider() 小部件等优点,并且不允许焦点超出范围。