我有以下代码片段,它显示了一个数字列表,并突出显示了当前的焦点项:

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突出显示并处于焦点的行为。实现这一目标的最佳方法是什么?

最佳答案

第一次按键时接受的解决方案失败:

AttributeError: 'SelectableText' object has no attribute 'keypress'

注入我自己的不做任何事情的实现可以消除错误,但它也完全破坏了所有的键绑定。
我发现了这个,看起来效果不错:
class SelectableText(urwid.Edit):
    def valid_char(self, ch):
        return False

关于python - Urwid ListBox:如何获得流体焦点运动?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8097183/

10-11 08:39