【问题标题】:How do you add pageup/pagedown keybindings to TextArea in python-prompt-toolkit?如何在 python-prompt-toolkit 中将 pageup/pagedown 键绑定添加到 TextArea?
【发布时间】:2021-03-03 22:35:20
【问题描述】:

我们以calculator.py 为例。

要添加与鼠标滚轮配合使用的滚动条,您需要更改:

output_field = TextArea(style="class:output-field", text=help_text)

到:

output_field = TextArea(style="class:output-field", text=help_text, scrollbar=True)

但是您会添加或更改什么来使用向上翻页和向下翻页键滚动 TextArea?

# The key bindings.
kb = KeyBindings()

@kb.add("pageup")
def _(event):
    # What goes here?
    pass

@kb.add("pagedown")
def _(event):
    # What goes here?
    pass

【问题讨论】:

    标签: python textarea prompt-toolkit


    【解决方案1】:

    改变焦点

    最简单的方法可能是导入focus_next(或focus_previous

    from prompt_toolkit.key_binding.bindings.focus import focus_next
    

    并将其绑定到 Control-Space(或其他任何东西)。

    # The key bindings.
    kb = KeyBindings()
    
    kb.add("c-space")(focus_next)
    

    保持专注

    您也可以,为了看似将注意力集中在input_field,导入scroll_page_upscroll_page_down

    from prompt_toolkit.key_binding.bindings.page_navigation import scroll_page_up, scroll_page_down
    

    然后将焦点切换到output_field,调用scroll_page_up/scroll_page_down,最后将焦点切换回input_field

    # The key bindings.
    kb = KeyBindings()
    
    @kb.add("pageup")
    def _(event):
        w = event.app.layout.current_window
        event.app.layout.focus(output_field.window)
        scroll_page_up(event)
        event.app.layout.focus(w)
    
    @kb.add("pagedown")
    def _(event):
        w = event.app.layout.current_window
        event.app.layout.focus(output_field.window)
        scroll_page_down(event)
        event.app.layout.focus(w)
    

    【讨论】:

    • 第二个非常适合我的用例,谢谢!就我而言,我需要始终关注输入字段,同时可以选择滚动输出字段。输入字段充当命令提示符,输出字段充当命令输出/历史记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多