我有以下代码片段,显示了一个数字列表,并突出显示了当前关注的项目:
import urwid
palette = [('header', 'white', 'black'),
('reveal focus', 'black', 'dark cyan', 'standout'),]
items = map(lambda x: urwid.Text(`x`), range(500))
items = map(lambda x: urwid.AttrMap(x, None, 'reveal focus'), items)
walker = urwid.SimpleListWalker(items)
listbox = urwid.ListBox(walker)
loop = urwid.MainLoop(listbox, palette)
loop.run()
当我启动程序时,终端看起来像:
0 <-- highlighted
1
2
3
...
如果按下向下按钮,则视图将更改为:
1
2
3
4 <-- highlighted
...
我希望在屏幕向下滚动之前将0-3突出显示并对焦.做到这一点的最佳方法是什么?
解决方法:
接受的解决方案在第一次按键时失败:
AttributeError: 'SelectableText' object has no attribute 'keypress'
注入我自己的不执行任何操作的实现,可以使错误消失,但同时也完全使所有键绑定失效.
我发现了这一点,它似乎正常工作:
class SelectableText(urwid.Edit):
def valid_char(self, ch):
return False