我用 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
我用来编写命令的焦点。
有什么帮助吗?!