Как сохранить urwid. Редактировать всегда в фокусе?

1

Я запрограммировал с помощью python + urwid экран, похожий на ircII, где у меня есть текстовый поток на весь экран терминала, а также редактируемый текст внизу в виде подсказки, чтобы пользователь вставлял команды и нажимал enter.

Основной частью экрана является urwid.SimpleFocusListWalker и для каждой строки нового текста (например, ответ команды) создается новый urwid.Text.

Этот код показывает, как я создаю макет.

self._widgetPromptText = urwid.Edit(self._textPrompt, initial_text)
self._widgetLinesList = urwid.SimpleFocusListWalker([])
self._widgetBufferListBox = urwid.ListBox(self._widgetLinesList)

self._w = urwid.Frame(header=self._widgetHeader,
                         body=self._widgetBufferListBox,
                         footer=self._widgetPromptText,
                         focus_part="footer")

Хорошо, теперь проблема в том, что когда мое оконное окно теряет фокус, и я нажимаю на него снова, щелкнув строку заголовка окна xterm, ИЛИ, просто щелкнув нижний urwid.Edit который действует как пользовательский ввод для команд, все Это хорошо.

НО, если я нажимаю на экран окна xterm, нижний urwid.Edit теряет фокус, поэтому он также теряет курсор. Я должен снова щелкнуть по urwid.Edit чтобы снова urwid.Edit курсор и уметь писать. Кажется, что когда с помощью мыши я нажимаю на экран, urwid покидает фокус с нижнего urwid.Edit и дает его urwid.SimpleFocusListWalker или urwid.ListBox, без возможности вернуть фокус на urwid.Edit, если только я щелкните мышью по нему.

Я определенно не хочу этого! Как я могу сказать urwid, чтобы не сосредоточиться на urwid.SimpleFocusListWalker или urwid.ListBox, или просто дать фокус urwid.Edit когда один из них получает его?

Что еще более важно, я хочу, чтобы можно было сказать urwid, чтобы никогда не оставлять фокус с urwid.Edit Я использую для написания команд.

Любая помощь?!

Теги:
urwid

1 ответ

0

Кажется, мне удалось решить эту ошибку, добавив этот код в мой класс:

def mouse_event(self, size, event, button, col, row, focus):
    pass

Теперь, когда я нажимаю на поверхность терминала, курсор больше не исчезает. Это именно то, что я искал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню