我有以下代码段,其中显示了一个数字列表,并突出显示了当前焦点内的项目:
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
...
如果我按下down
按钮,则视图将变为:
1
2
3
4 <-- highlighted
...
我希望在屏幕向下滚动之前,0-3
突出显示并处于对焦状态。实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
首次按键时,已接受的解决方案失败:
desired-name
注入我自己的实现,什么都不做会使错误消失,但它也完全包含了所有键绑定。
我发现了这一点似乎工作正常:
AttributeError: 'SelectableText' object has no attribute 'keypress'
答案 1 :(得分:1)
列表框中的项目需要是可选择的。这是一种方法:
class SelectableText(urwid.Text):
...
def selectable(self):
return True
...
items = map(lambda x: SelectableText(`x`), range(500))