Я запрограммировал с помощью 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
Я использую для написания команд.
Любая помощь?!
Кажется, мне удалось решить эту ошибку, добавив этот код в мой класс:
def mouse_event(self, size, event, button, col, row, focus):
pass
Теперь, когда я нажимаю на поверхность терминала, курсор больше не исчезает. Это именно то, что я искал.