pythonpromptoolkit:使容器可滚动

2024-09-30 06:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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')),
      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()

Tags: fromimportapplicationcolumncontentwindowtoolkitprompt
1条回答
网友
1楼 · 发布于 2024-09-30 06:23:21

首先,您应该在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()

相关问题 更多 >

    热门问题