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 从底部离开焦点urwid.Edit并将其提供给urwid.SimpleFocusListWalker或,除非我用鼠标单击它,否则urwid.ListBox不可能将焦点返回给。urwid.Edit

绝对不想要这个!我怎么能告诉 urwid 不要把重点放在 theurwid.SimpleFocusListWalker或 the 上urwid.ListBox,或者只是把重点放在urwid.Edit其中一个得到它的时候?

更重要的是,我希望能够告诉 urwid永远不要离开urwid.Edit我用来编写命令的焦点。

有什么帮助吗?!

4

1 回答 1

0

嗯,看来我已经能够通过将此代码添加到我的班级来解决错误:

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

现在,当我单击终端表面时,光标不再消失。这正是我一直在寻找的。

于 2018-06-18T07:45:50.673 回答