【问题标题】:python-prompt-toolkit: make container scrollablepython-prompt-toolkit:使容器可滚动
【发布时间】:2021-07-13 20:40:00
【问题描述】:

我正在尝试使用 ScrollablePane 使 Container 可滚动。但我无法使用鼠标或键盘滚动

from prompt_toolkit.layout.controls import FormattedTextControl
from prompt_toolkit import Application
from prompt_toolkit.layout import ScrollablePane
from prompt_toolkit.layout.layout import Layout
from prompt_toolkit.layout.containers import HSplit, VSplit, Window

content = HSplit(
  [
    VSplit(
      [Window(FormattedTextControl('First Column')),
      Window(FormattedTextControl('Second Column'))
      ]),
    VSplit(
      [Window(FormattedTextControl('First Column')),
      Window(FormattedTextControl('Second Column'))
      ]),
    VSplit(
      [Window(FormattedTextControl('First Column')),
      Window(FormattedTextControl('Second Column'))
      ]),
  ])
container = ScrollablePane(content=content)

app = Application(layout=Layout(container), full_screen=True)
app.run()

【问题讨论】:

    标签: python terminal prompt-toolkit ptpython


    【解决方案1】:

    首先,您应该在app 中启用mouse_support

    app = Application(mouse_support=True,...)
    

    这实际上似乎并没有使ScrollablePane 可以使用鼠标滚轮或使用箭头滚动。我还没有找到解决方案。

    我发现在ScrollablePane 中堆叠一堆可聚焦元素(例如Window)并分配键盘快捷键以将应用程序焦点从一个元素更改为下一个元素会滚动窗格。

    示例(降低窗口高度或增加number 以遮挡部分显示):

    from prompt_toolkit import Application
    from prompt_toolkit.application import get_app
    from prompt_toolkit.key_binding import KeyBindings
    from prompt_toolkit.layout import HSplit, FormattedTextControl, Window, ScrollablePane, Layout
    
    kb = KeyBindings()
    
    number = 30
    
    inner = HSplit(children=[Window(FormattedTextControl(text=f"Button {x}")) for x in range(number)])
    
    index = 0
    
    
    def increment_index():
        global index
        if index == number - 1:
            index = 0
        else:
            index += 1
    
    
    @kb.add('n')
    def _(event):
        increment_index()
        get_app().layout.focus(inner.children[index])
    
    
    @kb.add('q')
    def _(event):
        get_app().exit()
    
    
    outer = ScrollablePane(content=inner)
    
    app = Application(mouse_support=True, layout=Layout(outer), full_screen=True, key_bindings=kb)
    
    app.run()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      相关资源
      最近更新 更多