我正在使用 ipywidget 的“输出”小部件。 当文本发送到它时,滚动条会出现,因为数量超过了可以显示的数量。 此时,仅显示文本的第一行。 相反,当添加新文本时,我希望它自动滚动,以便始终显示打印的最后一行。
目前对于scroll_to_bottom问题还没有通用的解决方案。请参阅:https://github.com/jupyter-widgets/ipywidgets/issues/1815
在讨论中似乎有一个Linux特定的解决方案,我无法验证。
该问题位于ipywidgets的里程碑列表中https://github.com/jupyter-widgets/ipywidgets/milestone/2
尝试单击行并看到滚动自动发生,没有任何闪烁。
from ipydatagrid import DataGrid
import pandas as pd
from IPython.display import display, HTML
import ipywidgets as wid
data = {
'ID': [1, 2, 3, 4, 5],
'Name': ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve'],
'Age': [25, 30, 35, 40, 45]
}
df = pd.DataFrame(data)
datagrid = DataGrid(
df,
selection_mode='row',
editable=False,
)
out = wid.Output()
out.add_class("my-output")
app = wid.HBox([
datagrid,
out,
])
display(app)
display(HTML("""
<style>
.my-output {
min-width: 40%;
max-height: 500px;
border: 1px solid black;
border-radius: 10px;
overflow: scroll;
}
</style>
<script>
var outputDiv = document.querySelector(".my-output")
var observer = new MutationObserver(() => {
outputDiv.scrollTop = outputDiv.scrollHeight
})
observer.observe(outputDiv, {childList: true, characterData: true, subtree: true})
</script>
"""))
def on_selection_change(change):
out.append_stdout(", ".join([str(x) for x in datagrid.selected_cell_values]))
out.append_stdout("\n")
datagrid.observe(on_selection_change, names='selections')