在 Python 中使用 ipywidget 时水平滚动条不起作用

Horizontal scroll bar does not working when using ipywidget in Python

我正在Jupyter实验室学习ipywidget。我想要的是在数据框中搜索关键字,然后显示结果。因此,结果是一个可能很大的数据框。所以,我需要垂直条和水平条来显示所有数据。这是示例代码:

import pandas as pd
import numpy as np
import ipywidgets as widgets
from IPython.display import display
from ipywidgets import Button, Layout
import warnings

warnings.filterwarnings('ignore')
pd.set_option("display.max_rows", None)
pd.set_option('display.max_columns',None)
pd.set_option('max_colwidth', 4000)

a=pd.DataFrame({'a1':['aaaaaaaaaaaaaaaaaaaa','bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb','vvvvvvvvvvvvvvvvvvvvvvvvvvv','abc'],
                'a2':['bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb','eeeeeeeeeeeeeeeeeeeeeeeeeeee','sssssssssssssssssssssssssssss','abc'],
                'a3':['qqqqqqqqqqqqqqqqqqqqqqq','aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa','rrrrrrrrrrrrrrrrrrrrrrrrr','abc']})

keyword=widgets.Text(
    value='abc',
    placeholder='Type something',
    description='keyword:',
    disabled=False
)
#display(keyword)

button = widgets.Button(description="search")
#display(button)

input_widgets = widgets.HBox([keyword,button])
display(input_widgets)

#,width='500px', overflow_x='auto'
#output = widgets.Output(layout=Layout(height='400px', overflow_y='auto',width='1600px', overflow_x='auto'))
output = widgets.Output(layout=Layout(height='100px', width='500px',overflow='scroll'))

@output.capture()
def on_button_clicked(btn):
    output.clear_output()
    display(a)

button.on_click(on_button_clicked)
display(output)

从图中可以看出,竖条有效,但横条不起作用。只有当你滚动到数据框的末尾时,你才能看到水平条,这不是我们通常做的。希望单杠能显示在区域的最后。

一个简单的解决方法是将文本区域小部件(无布局)放入具有以下布局的 HBox 小部件

box_layout = widgets.Layout(display='flex',
                            flex_flow='row',
                            border='1px solid black',
                            width='140px',
                            height='400px')

output.layout.overflow = 'visible'