我如何知道哪个小部件具有 urwid 的焦点?

How do I know which widget has the focus with urwid?

我正在用 urwid 设计一个 Python 界面,我有几个无法使用光标导航键访问的元素(即 updown, left and right) 这确实是我想要的。我想要的是使用 Tab 键实现循环导航。

我想使用此技术实现三个组件 — 即由单选按钮组成的列表框、编辑框和编辑框右侧的按钮。我的应用程序是围绕派生 urwid.WidgetWrap 的 class 构建的。它包含一个框架,框架的主体是列表框,页脚包含编辑框。

到目前为止,我已经发现我可以从主循环的 unhandled_input 回调中捕获 Tab 键...但我不知道是否是这样去还是不去。此外,我还没有弄清楚如何检测这三个小部件中的哪一个具有焦点。

谁能给我指出正确的方向?

您可能想好好读一读 the urwid documentation for the Container widgets

每个容器小部件都应该跟踪在给定时刻哪些小部件具有焦点,并且它们具有 get_focus_path()get_focus_widgets 方法来查找焦点小部件。

看起来默认的容器小部件使用这个 WidgetContainerMixin class,您可以检查它以找到更多。

至于实现焦点处理的正确方法,我认为最好的方法是创建自定义小部件(继承现有小部件或使用 urwid.WidgetWrap 创建包装器),这将共享焦点处理行为,但至少使用 unhandled_input 可能是探索这些内容的良好起点。