我如何知道哪个小部件具有 urwid 的焦点?
How do I know which widget has the focus with urwid?
我正在用 urwid
设计一个 Python 界面,我有几个无法使用光标导航键访问的元素(即 up,down, 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
可能是探索这些内容的良好起点。
我正在用 urwid
设计一个 Python 界面,我有几个无法使用光标导航键访问的元素(即 up,down, 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
可能是探索这些内容的良好起点。