我怎么知道哪个小部件具有urwid焦点?

时间:2018-02-19 10:29:48

标签: navigation urwid

我正在设计一个带urwid的Python接口,我有几个使用光标导航键无法访问的元素(即 up down ,< kbd> left 和 right )这确实是我想要的。我想要的是使用 Tab 键实现循环导航。

我想使用这种技术达到三个组件 - 即一个由单选按钮组成的列表框,一个编辑框和编辑框右侧的按钮。我的应用程序是围绕一个派生urwid.WidgetWrap的类构建的。它包含一个框架,其主体是列表框,页脚包含编辑框。

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

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

您可能希望在the urwid documentation for the Container widgets中仔细阅读。

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

它看起来默认容器小部件使用此WidgetContainerMixin类,您可以检查它以查找更多内容。

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