Есть ли событие изменения фокуса в urwid?


Можно ли отследить изменение выделенного элемента в объекте urwid.ListBox? Или даже через объект ListWalker?

Я хотел бы вызвать обратный вызов, когда пользователь переходит от одного элемента к другому, используя клавиши со стрелками [

1 3

1 ответ:

После некоторых исследований и экспериментов это можно сделать, зарегистрировав сигнал modified с объектом ListWalker.

import urwid

def callback():
    index = str(listBox.get_focus()[1])
    debug.set_text("Index of selected item: " + index)


debug = urwid.Text("Debug")

captions = "A B C D E F".split()
items = [urwid.Button(caption) for caption in captions]
walker = urwid.SimpleListWalker(items)
listBox = urwid.ListBox(walker)

urwid.connect_signal(walker, "modified", callback)

frame = urwid.Frame(body=listBox, header=debug)
urwid.MainLoop(frame).run()

Ссылка: Urwid > сигнальные функции > connect

Введите описание изображения здесь