python - Urwid 列表框 : How to get fluid focus movement?

标签 python user-interface console curses urwid

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

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 按钮, View 将变为:

1
2
3
4   <-- highlighted
...

我想要一种行为,其中 0-3 在屏幕向下滚动之前突出显示并处于焦点中。实现此目标的最佳方法是什么?

最佳答案

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

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

注入(inject)我自己的不执行任何操作的实现会使错误消失,但它也会完全破坏所有键绑定(bind)。

我发现了这个,它似乎工作得很好:

class SelectableText(urwid.Edit):
    def valid_char(self, ch):
        return False

关于python - Urwid 列表框 : How to get fluid focus movement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8097183/

相关文章:

python - 在 Python 3.5 中复制时保留目录名称

python - 如何使用Python中的数据框更新现有的Excel工作表

git - msysgit:Unicode 字体警告

android - 是什么造就了 Android GUI 框架

c++ - 如何将 GUI 用户字符串输入转换为使用 C++ 库函数的格式

console - Chrome 控制台从 &lt;script&gt; 开始给我行号而不是顶部

ruby-on-rails - 自动初始化 Rails 控制台

python - Modelform ForeignKey - 如何避免 HTML 选择自动填充?

python - ANTLR解析MismatchedTokenException

javascript - 三 Angular 形的 Bootstrap 列