每次重新打开&无需内核时,如何使交互式Jupyter Notebook也通过IPython.display执行Javascript

如何解决每次重新打开&无需内核时,如何使交互式Jupyter Notebook也通过IPython.display执行Javascript

经过一番努力,我得以运行外部CSS和JavaScript并修改Jupyter Notebook中单元格的输出

即使不执行单元格(假设您在执行所有单元格后都保存了笔记本),CSS仍然可以正常工作。

但是,JavaScript并非如此。在执行基于Python的单元格之后,我必须执行注入Javascript的单元格,以使JavaScript对输出产生有意义的作用。无法执行在Python之前或在同一单元中插入JavaScript的单元格。它总是必须在Python单元之后。

这就是我要解决的问题。就像外部CSS不需要我一次又一次地执行单元,甚至不需要实时内核一样,我也希望JavaScript做到这一点。在这里,我也愿意拥有一个实时内核。但是,尽管有一个实时内核,但到目前为止仍需要执行JS单元。

是否可以让js处理单元格的输出而无需实际执行始终注入JS的单元格?我的意思是,保存完笔记本并执行所有单元格后,只要重新打开JS,它便会自动工作。

任何想法我该怎么做?

以下示例是我目前正在使用的示例(JS和CSS基本上修改了范围滑块和拇指)。
.ipynb文件中-
单元1 -尽管有内核,交互Python输出仍然有效

import altair as alt
from vega_datasets import data

source = data.population.url

pink_blue = alt.Scale(domain=('Male','Female'),range=["steelblue","salmon"])

range_slider = alt.binding_range(min=1900,max=2000,step=10)
select_year = alt.selection_single(name="year",fields=['year'],bind=range_slider,init={'year': 1900})

alt.Chart(source).mark_bar().encode(
    x=alt.X('sex:N',title=None),y=alt.Y('people:Q',scale=alt.Scale(domain=(0,12000000))),color=alt.Color('sex:N',scale=pink_blue),column='age:O'
).properties(
    width=20
).add_selection(
    select_year
).transform_calculate(
    "sex",alt.expr.if_(alt.datum.sex == 1,"Male","Female")
).transform_filter(
    select_year
).configure_facet(
    spacing=8
)

单元格2 -修改上述外观的CSS和JS。 CSS可以随时工作,但是要使JS正常工作,每次重新打开笔记本时,我都必须一次又一次地执行单元格。

from IPython.display import display,HTML,Javascript

display(HTML("""
<script type="text/Javascript">
    //document.addEventListener("DOMContentLoaded",function(event) {
    {
        // add color fill when drag
        const sliderColors = {
            fill: "#CE4931",background: "#999",};

        const slider = document.getElementsByName("year_year")[0];

        slider.addEventListener("input",(event) => {
            applyFill(event.target);
        });

        function applyFill(slider) {
            const percentage =
                (100 * (slider.value - slider.min)) / (slider.max - slider.min);

            const bg = `linear-gradient(90deg,${sliderColors.fill} ${percentage}%,${sliderColors.background} ${percentage}%)`;
            slider.style.background = bg;
        }

        applyFill(slider);
    }
//});
</script>

<style>
    input:hover {
        opacity: 1;
    }

    input::-webkit-slider-thumb {
        -webkit-appearance: none;
        appearance: none;
        background: red;
        cursor: pointer;
        border-radius: 0;
        border: 0;
        position: relative;
        width: 4px;
        height: 15px;
        background-color: #595959;
    }
    input::-moz-range-thumb {
        -moz-appearance: none;
        appearance: none;
        background: red;
        cursor: pointer;
        border-radius: 0;
        border: 0;
        position: relative;
        width: 4px;
        height: 15px;
        background-color: #595959;
    }
    input {
        background: rgba(0,0) linear-gradient(90deg,rgb(206,73,49) 0%,rgb(153,153,153) 0%) repeat scroll 0% 0%;
        -webkit-appearance: none;
        width: 100%;
        border-radius: 3px;
        margin: 0;
        position: relative;
        height: 3px;
        cursor: pointer;
        -webkit-transition: .2s;
        transition: opacity .2s;
        transition: all ease-in 0.25s;
    }

    input:focus,button:focus {
        outline: none;
    }

    iframe {
        sandBox: allow-modals allow-forms allow-popups allow-scripts allow-same-origin;
    }
</style>
"""))

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?