微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-prompt-toolkit:使容器可滚动

如何解决python-prompt-toolkit:使容器可滚动

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

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')),])
container = ScrollablePane(content=content)

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

解决方法

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

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

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

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

示例(降低窗口高度或增加 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。