使Jupyter笔记本中的单元格输出水平滚动?

问题描述 投票:0回答:5

我有一个很长的 Sympy 表达式,我想在其下方打印一个水平滚动条。在 Jupyter 中可以这样做吗?我可以切换垂直滚动,但我希望它可以水平滚动。垂直滚动的问题是,在我的例子中,

sympy.pretty_print()
的输出严重扭曲。输出看起来也很难看,用户必须不必要地滚动整个输出。

jupyter-notebook jupyter
5个回答
25
投票

类似于

np.set_printoptions(linewidth=some_large_number)
和/或
np.set_printoptions(threshold=some_large_number)
的方法可能很有用,但如果 Jupyter 的输出窗口本身太窄,则无法解决问题。

我最终找到的最快解决方案是将这一行插入笔记本顶部的某个位置:

from IPython.display import display, HTML
display(HTML("<style>pre { white-space: pre !important; }</style>"))

如果您想更改所有笔记本的此设置,则需要按照

此处
的讨论弄乱 Jupyter 的 custom.css 配置文件。

我浪费了太多时间来解决这个问题。希望我可以帮助你们中的一些人更快地弄清楚!


2
投票

稍微迭代一下 Eric 的回答,这是一个独立的版本,仅在您需要时创建水平滚动输出,而不是在笔记本范围内启用它:

from IPython.display import display, HTML
from pprint import pformat
def boxprint(*args):
    for arg in args:
        display(HTML('<pre style="white-space: pre !important;">{}</pre>'.format(pformat(arg))))

1
投票

如 Eric 所写,将

white-space
属性更改为
pre
可防止输出单元格自动换行,从而强制当前笔记本的所有宽输出使用水平滚动条。

不幸的是,更改此属性还会阻止编辑输入单元格时自动换行,这在编辑 Markdown 单元格时尤其烦人。更糟糕的是:这种行为不仅限于当前笔记本,例如在使用 JupyterLab 时,也会发生在所有打开的选项卡上。

我建议的解决方法是定义一个函数来在标准行为

white-space: pre-wrap
和滚动条行为
white-space:pre
之间切换。这个简单的函数就可以完成这项工作:

def hscroll(activate=True):
  """activate/deactivate horizontal scrolling for wide output cells"""
  from IPython.display import display, HTML
  style = ('pre-wrap','pre')[activate] # select white-space style
  display(HTML("<style>pre {white-space: %s !important}</style>" % style))

0
投票

悬停在正下方

out[]:

在笔记本中您会看到“滚动输出”。单击该区域中的任意位置,您的输出可以水平和垂直滚动。


0
投票

如果您使用的是Mac,只需向右/向左滚动,它就会自动开始滚动。

© www.soinside.com 2019 - 2024. All rights reserved.